libTriton version 1.0 build 1592
|
The abstract architecture class. More...
#include <architecture.hpp>
Public Member Functions | |
TRITON_EXPORT | Architecture (triton::callbacks::Callbacks *callbacks=nullptr) |
Constructor. | |
TRITON_EXPORT bool | isFlag (triton::arch::register_e regId) const |
Returns true if the register ID is a flag. | |
TRITON_EXPORT bool | isFlag (const triton::arch::Register ®) const |
Returns true if the register is a flag. | |
TRITON_EXPORT bool | isRegister (triton::arch::register_e regId) const |
Returns true if the register ID is a register. | |
TRITON_EXPORT bool | isRegister (const triton::arch::Register ®) const |
Returns true if the register is a register. | |
TRITON_EXPORT bool | isRegisterValid (triton::arch::register_e regId) const |
Returns true if the register ID is a register or a flag. | |
TRITON_EXPORT bool | isRegisterValid (const triton::arch::Register ®) const |
Returns true if the register is a register or a flag. | |
TRITON_EXPORT bool | isValid (void) const |
Returns true if the architecture is valid. | |
TRITON_EXPORT bool | isThumb (void) const |
Returns true if the execution mode is Thumb. Only valid for Arm32. | |
TRITON_EXPORT void | setThumb (bool state) |
Sets CPU state to Thumb mode. Only valid for Arm32. | |
TRITON_EXPORT bool | isMemoryExclusive (const triton::arch::MemoryAccess &mem) const |
Returns true if the memory access is tagged as exclusive. Only valid for Arm32 and AArch64. | |
TRITON_EXPORT void | setMemoryExclusiveTag (const triton::arch::MemoryAccess &mem, bool tag) |
Sets exclusive memory access tag. Only valid for Arm32 and AArch64. | |
TRITON_EXPORT triton::arch::architecture_e | getArchitecture (void) const |
Returns the kind of architecture as triton::arch::architecture_e. | |
TRITON_EXPORT triton::arch::endianness_e | getEndianness (void) const |
Returns the kind of endianness as triton::arch::endianness_e. | |
TRITON_EXPORT triton::arch::CpuInterface * | getCpuInstance (void) |
Returns the instance of the current CPU used. | |
TRITON_EXPORT triton::uint32 | numberOfRegisters (void) const |
Returns the number of registers according to the CPU architecture. | |
TRITON_EXPORT triton::uint32 | gprBitSize (void) const |
Returns the bit in bit of the General Purpose Registers. | |
TRITON_EXPORT triton::uint32 | gprSize (void) const |
Returns the bit in byte of the General Purpose Registers. | |
TRITON_EXPORT void | setArchitecture (triton::arch::architecture_e arch) |
Initializes an architecture. | |
TRITON_EXPORT void | clearArchitecture (void) |
Clears the architecture states (registers and memory). | |
TRITON_EXPORT const std::unordered_map< triton::arch::register_e, const triton::arch::Register > & | getAllRegisters (void) const |
Returns all registers. | |
TRITON_EXPORT const std::unordered_map< triton::uint64, triton::uint8, IdentityHash< triton::uint64 > > & | getConcreteMemory (void) const |
Return all memory. | |
TRITON_EXPORT std::set< const triton::arch::Register * > | getParentRegisters (void) const |
Returns all parent registers. | |
TRITON_EXPORT const triton::arch::Register & | getRegister (triton::arch::register_e id) const |
Returns register from id. | |
TRITON_EXPORT const triton::arch::Register & | getRegister (const std::string &name) const |
Returns register from name. | |
TRITON_EXPORT const triton::arch::Register & | getParentRegister (triton::arch::register_e id) const |
Returns parent register from id. | |
TRITON_EXPORT const triton::arch::Register & | getParentRegister (const triton::arch::Register ®) const |
Returns parent register from register. | |
TRITON_EXPORT const triton::arch::Register & | getProgramCounter (void) const |
Returns the program counter register. | |
TRITON_EXPORT const triton::arch::Register & | getStackPointer (void) const |
Returns the stack pointer register. | |
TRITON_EXPORT const triton::arch::Instruction | getNopInstruction (void) const |
Returns a NOP instruction according to the architecture. | |
TRITON_EXPORT void | disassembly (triton::arch::Instruction &inst) const |
Disassembles the instruction according to the architecture. | |
TRITON_EXPORT void | disassembly (triton::arch::BasicBlock &block, triton::uint64 addr=0) const |
Disassembles a block of instructions according to the architecture. | |
TRITON_EXPORT std::vector< triton::arch::Instruction > | disassembly (triton::uint64 addr, triton::usize count) const |
Disassembles a concrete memory area and returns a list of at most count disassembled instructions. | |
TRITON_EXPORT triton::arch::BasicBlock | disassembly (triton::uint64 addr, bool(*filterCallback)(std::vector< triton::arch::Instruction > &)) const |
Disassembles a concrete memory area from addr until 'filterCallback' returns false. The function returns a 'BasicBlock'. | |
TRITON_EXPORT triton::arch::BasicBlock | disassembly (triton::uint64 addr) const |
Disassembles a concrete memory area from addr to control flow instruction and returns a BasicBlock . | |
TRITON_EXPORT triton::uint8 | getConcreteMemoryValue (triton::uint64 addr, bool execCallbacks=true) const |
Returns the concrete value of a memory cell. | |
TRITON_EXPORT triton::uint512 | getConcreteMemoryValue (const triton::arch::MemoryAccess &mem, bool execCallbacks=true) const |
Returns the concrete value of memory cells. | |
TRITON_EXPORT std::vector< triton::uint8 > | getConcreteMemoryAreaValue (triton::uint64 baseAddr, triton::usize size, bool execCallbacks=true) const |
Returns the concrete value of a memory area. | |
TRITON_EXPORT triton::uint512 | getConcreteRegisterValue (const triton::arch::Register ®, bool execCallbacks=true) const |
Returns the concrete value of a register. | |
TRITON_EXPORT void | setConcreteMemoryValue (triton::uint64 addr, triton::uint8 value, bool execCallbacks=true) |
[architecture api] - Sets the concrete value of a memory cell. | |
TRITON_EXPORT void | setConcreteMemoryValue (const triton::arch::MemoryAccess &mem, const triton::uint512 &value, bool execCallbacks=true) |
[architecture api] - Sets the concrete value of memory cells. | |
TRITON_EXPORT void | setConcreteMemoryAreaValue (triton::uint64 baseAddr, const std::vector< triton::uint8 > &values, bool execCallbacks=true) |
[architecture api] - Sets the concrete value of a memory area. | |
TRITON_EXPORT void | setConcreteMemoryAreaValue (triton::uint64 baseAddr, const void *area, triton::usize size, bool execCallbacks=true) |
[architecture api] - Sets the concrete value of a memory area. | |
TRITON_EXPORT void | setConcreteRegisterValue (const triton::arch::Register ®, const triton::uint512 &value, bool execCallbacks=true) |
[architecture api] - Sets the concrete value of a register. | |
TRITON_EXPORT bool | isConcreteMemoryValueDefined (const triton::arch::MemoryAccess &mem) const |
Returns true if memory cells have a defined concrete value. | |
TRITON_EXPORT bool | isConcreteMemoryValueDefined (triton::uint64 baseAddr, triton::usize size=1) const |
Returns true if memory cells have a defined concrete value. | |
TRITON_EXPORT void | clearConcreteMemoryValue (const triton::arch::MemoryAccess &mem) |
Clears concrete values assigned to the memory cells. | |
TRITON_EXPORT void | clearConcreteMemoryValue (triton::uint64 baseAddr, triton::usize size=1) |
Clears concrete values assigned to the memory cells. | |
Protected Attributes | |
triton::arch::architecture_e | arch |
The kind of architecture used. | |
std::unique_ptr< triton::arch::CpuInterface > | cpu |
Instance to the real CPU class. | |
The abstract architecture class.
Definition at line 45 of file architecture.hpp.
triton::arch::Architecture::Architecture | ( | triton::callbacks::Callbacks * | callbacks = nullptr | ) |
Constructor.
Definition at line 30 of file architecture.cpp.
void triton::arch::Architecture::clearArchitecture | ( | void | ) |
Clears the architecture states (registers and memory).
Definition at line 79 of file architecture.cpp.
void triton::arch::Architecture::clearConcreteMemoryValue | ( | const triton::arch::MemoryAccess & | mem | ) |
Clears concrete values assigned to the memory cells.
Definition at line 379 of file architecture.cpp.
void triton::arch::Architecture::clearConcreteMemoryValue | ( | triton::uint64 | baseAddr, |
triton::usize | size = 1 ) |
Clears concrete values assigned to the memory cells.
Definition at line 386 of file architecture.cpp.
void triton::arch::Architecture::disassembly | ( | triton::arch::BasicBlock & | block, |
triton::uint64 | addr = 0 ) const |
Disassembles a block of instructions according to the architecture.
Definition at line 247 of file architecture.cpp.
void triton::arch::Architecture::disassembly | ( | triton::arch::Instruction & | inst | ) | const |
Disassembles the instruction according to the architecture.
Definition at line 240 of file architecture.cpp.
triton::arch::BasicBlock triton::arch::Architecture::disassembly | ( | triton::uint64 | addr | ) | const |
Disassembles a concrete memory area from addr
to control flow instruction and returns a BasicBlock
.
Definition at line 297 of file architecture.cpp.
triton::arch::BasicBlock triton::arch::Architecture::disassembly | ( | triton::uint64 | addr, |
bool(*)(std::vector< triton::arch::Instruction > &) | filterCallback ) const |
Disassembles a concrete memory area from addr
until 'filterCallback' returns false. The function returns a 'BasicBlock'.
Definition at line 278 of file architecture.cpp.
std::vector< triton::arch::Instruction > triton::arch::Architecture::disassembly | ( | triton::uint64 | addr, |
triton::usize | count ) const |
Disassembles a concrete memory area and returns a list of at most count
disassembled instructions.
Definition at line 259 of file architecture.cpp.
const std::unordered_map< triton::arch::register_e, const triton::arch::Register > & triton::arch::Architecture::getAllRegisters | ( | void | ) | const |
Returns all registers.
Definition at line 178 of file architecture.cpp.
triton::arch::architecture_e triton::arch::Architecture::getArchitecture | ( | void | ) | const |
Returns the kind of architecture as triton::arch::architecture_e.
Definition at line 36 of file architecture.cpp.
const std::unordered_map< triton::uint64, triton::uint8, IdentityHash< triton::uint64 > > & triton::arch::Architecture::getConcreteMemory | ( | void | ) | const |
Return all memory.
Definition at line 184 of file architecture.cpp.
std::vector< triton::uint8 > triton::arch::Architecture::getConcreteMemoryAreaValue | ( | triton::uint64 | baseAddr, |
triton::usize | size, | ||
bool | execCallbacks = true ) const |
Returns the concrete value of a memory area.
Definition at line 316 of file architecture.cpp.
triton::uint512 triton::arch::Architecture::getConcreteMemoryValue | ( | const triton::arch::MemoryAccess & | mem, |
bool | execCallbacks = true ) const |
Returns the concrete value of memory cells.
Definition at line 309 of file architecture.cpp.
triton::uint8 triton::arch::Architecture::getConcreteMemoryValue | ( | triton::uint64 | addr, |
bool | execCallbacks = true ) const |
Returns the concrete value of a memory cell.
Definition at line 302 of file architecture.cpp.
triton::uint512 triton::arch::Architecture::getConcreteRegisterValue | ( | const triton::arch::Register & | reg, |
bool | execCallbacks = true ) const |
Returns the concrete value of a register.
Definition at line 323 of file architecture.cpp.
triton::arch::CpuInterface * triton::arch::Architecture::getCpuInstance | ( | void | ) |
Returns the instance of the current CPU used.
Definition at line 48 of file architecture.cpp.
triton::arch::endianness_e triton::arch::Architecture::getEndianness | ( | void | ) | const |
Returns the kind of endianness as triton::arch::endianness_e.
Definition at line 41 of file architecture.cpp.
const triton::arch::Instruction triton::arch::Architecture::getNopInstruction | ( | void | ) | const |
Returns a NOP instruction according to the architecture.
Definition at line 393 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getParentRegister | ( | const triton::arch::Register & | reg | ) | const |
Returns parent register from register.
Definition at line 226 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getParentRegister | ( | triton::arch::register_e | id | ) | const |
Returns parent register from id.
Definition at line 233 of file architecture.cpp.
std::set< const triton::arch::Register * > triton::arch::Architecture::getParentRegisters | ( | void | ) | const |
Returns all parent registers.
Definition at line 191 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getProgramCounter | ( | void | ) | const |
Returns the program counter register.
Definition at line 198 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getRegister | ( | const std::string & | name | ) | const |
Returns register from name.
Definition at line 219 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getRegister | ( | triton::arch::register_e | id | ) | const |
Returns register from id.
Definition at line 212 of file architecture.cpp.
const triton::arch::Register & triton::arch::Architecture::getStackPointer | ( | void | ) | const |
Returns the stack pointer register.
Definition at line 205 of file architecture.cpp.
triton::uint32 triton::arch::Architecture::gprBitSize | ( | void | ) | const |
Returns the bit in bit of the General Purpose Registers.
Definition at line 171 of file architecture.cpp.
triton::uint32 triton::arch::Architecture::gprSize | ( | void | ) | const |
Returns the bit in byte of the General Purpose Registers.
Definition at line 164 of file architecture.cpp.
bool triton::arch::Architecture::isConcreteMemoryValueDefined | ( | const triton::arch::MemoryAccess & | mem | ) | const |
Returns true if memory cells have a defined concrete value.
Definition at line 365 of file architecture.cpp.
bool triton::arch::Architecture::isConcreteMemoryValueDefined | ( | triton::uint64 | baseAddr, |
triton::usize | size = 1 ) const |
Returns true if memory cells have a defined concrete value.
Definition at line 372 of file architecture.cpp.
bool triton::arch::Architecture::isFlag | ( | const triton::arch::Register & | reg | ) | const |
Returns true if the register is a flag.
Definition at line 100 of file architecture.cpp.
bool triton::arch::Architecture::isFlag | ( | triton::arch::register_e | regId | ) | const |
Returns true if the register ID is a flag.
Definition at line 93 of file architecture.cpp.
bool triton::arch::Architecture::isMemoryExclusive | ( | const triton::arch::MemoryAccess & | mem | ) | const |
Returns true if the memory access is tagged as exclusive. Only valid for Arm32 and AArch64.
Definition at line 143 of file architecture.cpp.
bool triton::arch::Architecture::isRegister | ( | const triton::arch::Register & | reg | ) | const |
Returns true if the register is a register.
Definition at line 112 of file architecture.cpp.
bool triton::arch::Architecture::isRegister | ( | triton::arch::register_e | regId | ) | const |
Returns true if the register ID is a register.
Definition at line 105 of file architecture.cpp.
bool triton::arch::Architecture::isRegisterValid | ( | const triton::arch::Register & | reg | ) | const |
Returns true if the register is a register or a flag.
Definition at line 124 of file architecture.cpp.
bool triton::arch::Architecture::isRegisterValid | ( | triton::arch::register_e | regId | ) | const |
Returns true if the register ID is a register or a flag.
Definition at line 117 of file architecture.cpp.
bool triton::arch::Architecture::isThumb | ( | void | ) | const |
Returns true if the execution mode is Thumb. Only valid for Arm32.
Definition at line 129 of file architecture.cpp.
bool triton::arch::Architecture::isValid | ( | void | ) | const |
Returns true if the architecture is valid.
Definition at line 86 of file architecture.cpp.
triton::uint32 triton::arch::Architecture::numberOfRegisters | ( | void | ) | const |
Returns the number of registers according to the CPU architecture.
Definition at line 157 of file architecture.cpp.
void triton::arch::Architecture::setArchitecture | ( | triton::arch::architecture_e | arch | ) |
Initializes an architecture.
Definition at line 55 of file architecture.cpp.
void triton::arch::Architecture::setConcreteMemoryAreaValue | ( | triton::uint64 | baseAddr, |
const std::vector< triton::uint8 > & | values, | ||
bool | execCallbacks = true ) |
[architecture api] - Sets the concrete value of a memory area.
Note that by setting a concrete value will probably imply a desynchronization with the symbolic state (if it exists). You should probably use the concretize functions after this.
Definition at line 344 of file architecture.cpp.
void triton::arch::Architecture::setConcreteMemoryAreaValue | ( | triton::uint64 | baseAddr, |
const void * | area, | ||
triton::usize | size, | ||
bool | execCallbacks = true ) |
[architecture api] - Sets the concrete value of a memory area.
Note that by setting a concrete value will probably imply a desynchronization with the symbolic state (if it exists). You should probably use the concretize functions after this.
Definition at line 351 of file architecture.cpp.
void triton::arch::Architecture::setConcreteMemoryValue | ( | const triton::arch::MemoryAccess & | mem, |
const triton::uint512 & | value, | ||
bool | execCallbacks = true ) |
[architecture api] - Sets the concrete value of memory cells.
Note that by setting a concrete value will probably imply a desynchronization with the symbolic state (if it exists). You should probably use the concretize functions after this.
Definition at line 337 of file architecture.cpp.
void triton::arch::Architecture::setConcreteMemoryValue | ( | triton::uint64 | addr, |
triton::uint8 | value, | ||
bool | execCallbacks = true ) |
[architecture api] - Sets the concrete value of a memory cell.
Note that by setting a concrete value will probably imply a desynchronization with the symbolic state (if it exists). You should probably use the concretize functions after this.
Definition at line 330 of file architecture.cpp.
void triton::arch::Architecture::setConcreteRegisterValue | ( | const triton::arch::Register & | reg, |
const triton::uint512 & | value, | ||
bool | execCallbacks = true ) |
[architecture api] - Sets the concrete value of a register.
Note that by setting a concrete value will probably imply a desynchronization with the symbolic state (if it exists). You should probably use the concretize functions after this.
Definition at line 358 of file architecture.cpp.
void triton::arch::Architecture::setMemoryExclusiveTag | ( | const triton::arch::MemoryAccess & | mem, |
bool | tag ) |
Sets exclusive memory access tag. Only valid for Arm32 and AArch64.
Definition at line 150 of file architecture.cpp.
void triton::arch::Architecture::setThumb | ( | bool | state | ) |
Sets CPU state to Thumb mode. Only valid for Arm32.
Definition at line 136 of file architecture.cpp.
|
protected |
The kind of architecture used.
Definition at line 52 of file architecture.hpp.
|
protected |
Instance to the real CPU class.
Definition at line 55 of file architecture.hpp.