|
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. |
1.8.15