GTIRB-PPRINTER
v0.1.1
GrammaTech Intermediate Representation for Binaries: Pretty Printer
|
A pretty printer from the GTIRB intermediate representation for binary analysis and reverse engineering to gas-syntax assembly code.
The pretty-printer uses C++17, and requires a compiler which supports that standard such as gcc 7, clang 6, or MSVC 2017.
Boost (1.67 or later) and GTIRB are required.
Use the following options to configure cmake:
-DCMAKE_CXX_COMPILER=<compiler>
.-Dgtirb_DIR=<path-to-gtirb-build>
.Once the dependencies are installed, you can configure and build as follows:
Pretty print the GTIRB for a simple hello world executable to an assembly file named hello.S
, assemble this file with the GNU assembler to an object file named hello.o
, and link this object file into an executable.
Generating assembly depends on a number of additional pieces of information beyond the symbols and instruction/data bytes in the IR. The pretty printer expects this information to be available in a number of AuxData objects stored with the IR. We document the expected keys along with the associated types and contents in this table.
Key | Type | Purpose |
---|---|---|
comments | std::map<gtirb::Addr, std::string> | Per-instruction comments. |
functionEntries | std::map<gtirb::UUID, std::vector<gtirb::UUID>> | UUIDs of the blocks that are entry points of functions. |
symbolForwarding | std::map<gtirb::UUID, gtirb::UUID> | Map from symbols to other symbols. This table is used to forward symbols due to relocations or due to the use of plt and got tables. |
types | std::map<gtirb::UUID,std::string> | Map from (typed) data objects to the type of the data, expressed as a std::string containing a C++ type specifier. |