libTriton version 1.0 build 1590
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) 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 25 of file architecture.cpp.

Member Function Documentation

◆ clearArchitecture()

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

Clears the architecture states (registers and memory).

Definition at line 70 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 364 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 371 of file architecture.cpp.

◆ disassembly() [1/4]

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 238 of file architecture.cpp.

◆ disassembly() [2/4]

void triton::arch::Architecture::disassembly ( triton::arch::Instruction inst) const

Disassembles the instruction according to the architecture.

Definition at line 231 of file architecture.cpp.

◆ disassembly() [3/4]

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 269 of file architecture.cpp.

◆ disassembly() [4/4]

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 250 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 169 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 31 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 175 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 301 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 294 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 287 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 308 of file architecture.cpp.

◆ getCpuInstance()

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

Returns the instance of the current CPU used.

Definition at line 43 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 36 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 378 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 217 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 224 of file architecture.cpp.

◆ getParentRegisters()

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

Returns all parent registers.

Definition at line 182 of file architecture.cpp.

◆ getProgramCounter()

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

Returns the program counter register.

Definition at line 189 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 210 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 203 of file architecture.cpp.

◆ getStackPointer()

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

Returns the stack pointer register.

Definition at line 196 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 162 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 155 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 350 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 357 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 91 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 84 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 134 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 103 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 96 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 115 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 108 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 120 of file architecture.cpp.

◆ isValid()

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

Returns true if the architecture is valid.

Definition at line 77 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 148 of file architecture.cpp.

◆ setArchitecture()

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

Initializes an architecture.

Definition at line 50 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 329 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 336 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 322 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 315 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 343 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 141 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 127 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: