Overview¶
Amoco is composed of 5 sub-packages
arch, deals with CPU architectures’ 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.