Debugtrace is a tool for printing execution traces that are helpful for debugging. It can generate instruction or call traces. It shows every instruction as it is executed, the values of registers that are written, and the memory that is read and written. It uses instrumentation rather than the debugging API, so it is much faster than doing the same thing with gdb. You can customize it to your own debugging needs. The tool works on Linux ARM, IA32, and EM64T.
Erasm++, the Embedded Runtime Assembler in C++, is an Embedded Domain Specific Language (EDSL) in C++ for runtime code generation on Intel 64/IA-32 architectures. It supports complete compile-time syntax checking, and its code generators run very quickly because necessary data are computed statically. Also included are GenericDsm, a fast and generic instruction decoder library which supports "pattern matching" against the decoded instructions, and MetaPrelude, a Haskell-like lazy metaprogramming library that helps implementing EDSLs in C++.
Fenris is a multipurpose tracer, debugger, and code analysis tool that detects and documents high-level language constructions, can recover symbols, graph program execution flow, detect internal functions, recover symbol tables, and deal with anti-debugging protection. It features a command-line interface as well as a SoftICE-alike GUI and Web frontend.
The GCC XML Tree Node Introspector project consists of a patch to the gcc compiler to output the internal compiler tree nodes in RDF/XML and programs to process that RDF/XML. The tree nodes are complex data structures which represent the source code inside the compiler. Through these tree nodes, users are able to extract information from their programs that would be otherwise very difficult to obtain. Modules exist to store these nodes in Redland RDF using a Berkley database. The long-term goal of the project is create a high-level API that will make the programmatic manipulation of programs easier than it is now.
Hachoir is a Python library used to represent a binary file as a tree of Python objects. Each object has a type, a value, an address, etc. The goal is to be able to know the meaning of each bit in a file. Hachoir is able to open invalid or truncated files. It only reads or computes data on demand to minimize load times. Many field types are predefined (integer, bit, string, etc.) and strings with a given character set (such as ISO-8859-1 or UTF-8) are supported. Addresses and sizes are stored in bits.