Overview¶
Amoco is composed of 5 sub-packages
- arch, deals with
CPU architecures’ to provide instructions disassemblers, and
instructions’ semantics for several CPUs, microcontrollers or
“virtual machines”:
- x86, x64
- armv7, armv8 (aarch64)
- sparc (v8)
- MIPS (R3000)
- riscv
- msp430
- avr
- pic/F46K22
- v850
- sh2, sh4
- z80
- BPF/eBPF (vm)
- Dwarf (vm)
- cas, implements the computer algebra system to provide operations and mappings with symbolic expressions. It allows to represent architectures’ registers values either as concrete or symbolic values, and to describe instructions’ semantics as a map of expressions to registers or memory addresses. If z3 is installed, boolean expressions formulas can be translated to z3 bitvectors and checked by its solver. If satisfiable, a z3 model can be translated back into a :class:̀`mapper` instance (with amoco expressions.)
- system, implements all system features like an abstract memory suited for symbolic expressions, as well as support for executable formats (ELF,PE,Mach-O,…) and their loaders to provide an abstraction of a “task” (a memory-mapped binary exectuable.)
- sa implements various static analysis methods to recover and build the control flow graph of functions.
- ui deals with how instructions and expressions are displayed either in a terminal or in a graphical user interface.
Modules code
and cfg
provide high-level abstractions of basic blocks, functions, and
control flow graphs.
Module config
, logger
, and signals
provide the global configuration, logging and signaling facilities
to all other modules.