Skip to content

Artifacts#

This page reports the list of all the artifacts that can be produced by rev.ng.

lift artifact#

revng project artifact lift

Branch: lift

File name: lifted.bc

The root function produced by the lifting phase. It's a single large function containing all of the executable code identified in the binary.

emit-cfg artifact#

revng project artifact emit-cfg

Branch: collect-cfg

This artifact is an archive containing one YAML file for each function. Each document contains the control-flow graph of a function, plus the control-flow graph of each of the functions that need to be inlined into it.

isolate artifact#

revng project artifact isolate

Branch: isolate

File name: isolated.bc

This artifact contains one single-function module per function in the input program. The functions still employ global variables (CSVs) to pass and return data. Therefore, they lack arguments and return values.

enforce-abi artifact#

revng project artifact enforce-abi

Branch: segregate-stack-accesses

File name: abi_enforced.bc

This artifact contains one single-function module per function in the input program. The functions no longer use global variables (CSVs) to communicate: each register is promoted to a local variable, an argument and/or a return value.

This means that, for instance, a function using the SystemV ABI for x86-64 that has two uint8_t arguments, will have two 64-bits registers, not two 8-bits registers. This reflects the fact that in the considered ABI, two uint8_t arguments are passed on the rdi and rsi registers.

The stack pointer is an exception: it's still used as a CSV. As a consequence, stack arguments are not promoted to actual arguments: they are accessed with pointer arithmetic w.r.t. the stack pointer CSV.

simplify-switch artifact#

revng project artifact simplify-switch

Branch: segregate-stack-accesses

File name: simplify-switch.bc

This artifact contains one single-function module per function in the input program. The stack pointer has been promoted to a local variable and initialized with the result of an opaque function call.

segregate-stack-accesses artifact#

revng project artifact segregate-stack-accesses

Branch: segregate-stack-accesses

File name: stack_accesses_segregated.bc

clifter-input artifact#

revng project artifact clifter-input

Branch: clift-functions

File name: clifter_input.bc

clift-unoptimized artifact#

revng project artifact clift-unoptimized

Branch: clift-functions

File name: clifter_unoptimized.mlir.bc

pre-backend-clift artifact#

revng project artifact pre-backend-clift

Branch: clift-functions

File name: pre_backend_clift.mlir.bc

emit-c artifact#

revng project artifact emit-c

Branch: single-file

File name: decompiled.c

This artifact contains a C function for each function in the input program.

emit-c-as-single-file artifact#

revng project artifact emit-c-as-single-file

Branch: single-file

File name: binary_decompiled.c

This artifact is a single PTML file representing the decompiled C code of the whole program, including the body of all of program's functions. (Clift backend)

emit-helper-header artifact#

revng project artifact emit-helper-header

Branch: helpers

File name: helpers.h

This artifact contains all the declarations of llvm and qemu helpers that survived until the decompiled code.

emit-tagless-c artifact#

revng project artifact emit-tagless-c

Branch: tagless-single-file

File name: decompiled.c

emit-tagless-c-as-single-file artifact#

revng project artifact emit-tagless-c-as-single-file

Branch: tagless-single-file

File name: binary_decompiled.c

emit-tagless-helper-header artifact#

revng project artifact emit-tagless-helper-header

Branch: tagless-single-file

File name: helpers.h

emit-tagless-type-and-global-header artifact#

revng project artifact emit-tagless-type-and-global-header

Branch: tagless-single-file

File name: types-and-globals.h

emit-recompilable-archive artifact#

revng project artifact emit-recompilable-archive

Branch: tagless-single-file

File name: recompilable_archive.tar

hexdump artifact#

revng project artifact hexdump

Branch: hexdump

File name: hex_dump.hex

This artifact contains a hex dump of each segment in the input binary.

disassemble artifact#

revng project artifact disassemble

Branch: disassemble

File name: disassembly.S

This artifact is an archive of PTML files. Each file represents the disassembly of the given function.

recompile artifact#

revng project artifact recompile

Branch: recompile

File name: translated-binary

This artifact is translated version of the input binary. Specifically, it's an ELF executable for Linux x86-64 containing the root function plus the required runtime.

recompile-isolated artifact#

revng project artifact recompile-isolated

Branch: recompile-isolated

File name: isolated-translated-binary

This artifact is translated version of the input binary. Specifically, it's an ELF executable for Linux x86-64 containing the root function, all the isolated functions plus the required runtime.

cleanup-ir artifact#

revng project artifact cleanup-ir

Branch: cleanup-ir

File name: clean-ir.bc

This artifact contains one single-function module per function defined in this binary.

The output is similar to the output of make-segment-ref but it's cleaned up from rev.ng-specific artifacts in order to be more easily consumed as standard LLVM IR.

This is an appropriate artifact on top of which write analyses, such as a taint analysis.

cross-relations artifact#

revng project artifact cross-relations

Branch: process-call-graph

File name: cross-relations.yml

render-svg-call-graph artifact#

revng project artifact render-svg-call-graph

Branch: yield-call-graph

File name: call-graph.svg

This artifact is an SVG representing the call graph of the input program.

render-svg-call-graph-slice artifact#

revng project artifact render-svg-call-graph-slice

Branch: yield-call-graph-slice

File name: call-graph-slice.svg

This artifact is an archive of SVG files. Each file represents a subset of the call graph considering only the functions called/calling, directly or indirectly, the given function.

render-svg-cfg artifact#

revng project artifact render-svg-cfg

Branch: yield-cfg

File name: cfg.svg

This artifact is an archive of SVG files. Each file represents the CFG of the given function.

import-types artifact#

revng project artifact import-types

Branch: import-types

File name: types.mlir

This artifact contains all the declarations of non-primitive types without any name or comment information.

type-and-global-header-clift artifact#

revng project artifact type-and-global-header-clift

Branch: emit-type-and-global-header

File name: type-and-global-header.mlir.bc

emit-type-and-global-header artifact#

revng project artifact emit-type-and-global-header

Branch: emit-type-and-global-header

File name: types-and-globals.h

This artifact is a header containing all the declarations of non-primitive types, functions and segments.

emit-single-type-definition artifact#

revng project artifact emit-single-type-definition

Branch: emit-single-type-definition

File name: type.h

This artifact is an archive of plain C headers. Each file contains the declaration of a type defined for this binary. This artifact is designed to be used as the initial input of the edit-c-type analysis. In fact, this artifact is designed to be easily editable by the end-user; it's not designed to represent valid C code, unlike the emit-type-and-global-header artifact.