libTriton version 1.0 build 1592
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
triton::arch::Architecture Class Reference

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 &reg) 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 &reg) 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 &reg) 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::CpuInterfacegetCpuInstance (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::RegistergetRegister (triton::arch::register_e id) const
 Returns register from id.
 
TRITON_EXPORT const triton::arch::RegistergetRegister (const std::string &name) const
 Returns register from name.
 
TRITON_EXPORT const triton::arch::RegistergetParentRegister (triton::arch::register_e id) const
 Returns parent register from id.
 
TRITON_EXPORT const triton::arch::RegistergetParentRegister (const triton::arch::Register &reg) const
 Returns parent register from register.
 
TRITON_EXPORT const triton::arch::RegistergetProgramCounter (void) const
 Returns the program counter register.
 
TRITON_EXPORT const triton::arch::RegistergetStackPointer (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::Instructiondisassembly (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::uint8getConcreteMemoryAreaValue (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 &reg, 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 &reg, 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::CpuInterfacecpu
 Instance to the real CPU class.
 

Detailed Description

The abstract architecture class.

Definition at line 45 of file architecture.hpp.

Constructor & Destructor Documentation

◆ Architecture()

triton::arch::Architecture::Architecture ( triton::callbacks::Callbacks * callbacks = nullptr)

Constructor.

Definition at line 30 of file architecture.cpp.

Member Function Documentation

◆ clearArchitecture()

void triton::arch::Architecture::clearArchitecture ( void )

Clears the architecture states (registers and memory).

Definition at line 79 of file architecture.cpp.

◆ clearConcreteMemoryValue() [1/2]

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.

◆ clearConcreteMemoryValue() [2/2]

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.

◆ disassembly() [1/5]

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.

◆ disassembly() [2/5]

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.

◆ disassembly() [3/5]

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.

◆ disassembly() [4/5]

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.

◆ disassembly() [5/5]

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.

◆ getAllRegisters()

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.

◆ getArchitecture()

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.

◆ getConcreteMemory()

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.

◆ getConcreteMemoryAreaValue()

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.

◆ getConcreteMemoryValue() [1/2]

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.

◆ getConcreteMemoryValue() [2/2]

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.

◆ getConcreteRegisterValue()

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.

◆ getCpuInstance()

triton::arch::CpuInterface * triton::arch::Architecture::getCpuInstance ( void )

Returns the instance of the current CPU used.

Definition at line 48 of file architecture.cpp.

◆ getEndianness()

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.

◆ getNopInstruction()

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.

◆ getParentRegister() [1/2]

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.

◆ getParentRegister() [2/2]

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.

◆ getParentRegisters()

std::set< const triton::arch::Register * > triton::arch::Architecture::getParentRegisters ( void ) const

Returns all parent registers.

Definition at line 191 of file architecture.cpp.

◆ getProgramCounter()

const triton::arch::Register & triton::arch::Architecture::getProgramCounter ( void ) const

Returns the program counter register.

Definition at line 198 of file architecture.cpp.

◆ getRegister() [1/2]

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.

◆ getRegister() [2/2]

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.

◆ getStackPointer()

const triton::arch::Register & triton::arch::Architecture::getStackPointer ( void ) const

Returns the stack pointer register.

Definition at line 205 of file architecture.cpp.

◆ gprBitSize()

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.

◆ gprSize()

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.

◆ isConcreteMemoryValueDefined() [1/2]

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.

◆ isConcreteMemoryValueDefined() [2/2]

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.

◆ isFlag() [1/2]

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.

◆ isFlag() [2/2]

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.

◆ isMemoryExclusive()

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.

◆ isRegister() [1/2]

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.

◆ isRegister() [2/2]

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.

◆ isRegisterValid() [1/2]

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.

◆ isRegisterValid() [2/2]

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.

◆ isThumb()

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.

◆ isValid()

bool triton::arch::Architecture::isValid ( void ) const

Returns true if the architecture is valid.

Definition at line 86 of file architecture.cpp.

◆ numberOfRegisters()

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.

◆ setArchitecture()

void triton::arch::Architecture::setArchitecture ( triton::arch::architecture_e arch)

Initializes an architecture.

Definition at line 55 of file architecture.cpp.

◆ setConcreteMemoryAreaValue() [1/2]

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.

◆ setConcreteMemoryAreaValue() [2/2]

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.

◆ setConcreteMemoryValue() [1/2]

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.

◆ setConcreteMemoryValue() [2/2]

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.

◆ setConcreteRegisterValue()

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.

◆ setMemoryExclusiveTag()

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.

◆ setThumb()

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.

Member Data Documentation

◆ arch

triton::arch::architecture_e triton::arch::Architecture::arch
protected

The kind of architecture used.

Definition at line 52 of file architecture.hpp.

◆ cpu

std::unique_ptr<triton::arch::CpuInterface> triton::arch::Architecture::cpu
protected

Instance to the real CPU class.

Definition at line 55 of file architecture.hpp.


The documentation for this class was generated from the following files: