8#ifndef TRITON_RISCV32CPU_HPP
9#define TRITON_RISCV32CPU_HPP
13#include <unordered_map>
69 void disassInit(
void);
79 std::unordered_map<triton::uint64, triton::uint8, IdentityHash<triton::uint64>>
memory;
213 #define SYS_REG_SPEC(_, LOWER_NAME, _2, _3, _4, _5, _6) \
214 triton::uint8 LOWER_NAME[triton::size::qword];
215 #define REG_SPEC(_1, _2, _3, _4, _5, _6, _7)
216 #define REG_SPEC_NO_CAPSTONE(_1, _2, _3, _4, _5, _6, _7)
217 #include "triton/riscv32.spec"
242 TRITON_EXPORT
bool isThumb(
void)
const;
244 TRITON_EXPORT
const std::unordered_map<triton::arch::register_e, const triton::arch::Register>&
getAllRegisters(
void)
const;
245 TRITON_EXPORT
const std::unordered_map<triton::uint64, triton::uint8, IdentityHash<triton::uint64>>&
getConcreteMemory(
void)
const;
261 TRITON_EXPORT
void clear(
void);
268 TRITON_EXPORT
void setThumb(
bool state);
This interface is used as abstract CPU interface. All CPU must use this interface.
This class is used to represent an instruction.
This class is used to represent a memory access.
This class is used when an instruction has a register operand.
This class is used to describe the RV32 spec.
triton::uint8 f25[triton::size::qword]
Concrete value of f25.
TRITON_EXPORT void setThumb(bool state)
Sets CPU state to Thumb mode.
triton::uint8 sp[triton::size::dword]
Concrete value of sp.
triton::uint8 x14[triton::size::dword]
Concrete value of x14.
triton::uint8 x20[triton::size::dword]
Concrete value of x20.
TRITON_EXPORT triton::uint32 numberOfRegisters(void) const
Returns the number of registers according to the CPU architecture.
triton::uint8 x0[triton::size::dword]
Concrete value of x0.
triton::uint8 x12[triton::size::dword]
Concrete value of x12.
triton::uint8 x31[triton::size::dword]
Concrete value of x31.
triton::uint8 x15[triton::size::dword]
Concrete value of x15.
TRITON_EXPORT bool isFlag(triton::arch::register_e regId) const
Returns true if the register ID is a flag.
triton::uint8 x10[triton::size::dword]
Concrete value of x10.
triton::uint8 f11[triton::size::qword]
Concrete value of f11.
triton::uint8 x13[triton::size::dword]
Concrete value of x13.
triton::uint8 f0[triton::size::qword]
Concrete value of f0.
TRITON_EXPORT bool isThumb(void) const
Returns true if the execution mode is Thumb. Only useful for Arm32.
TRITON_EXPORT const std::unordered_map< triton::arch::register_e, const triton::arch::Register > & getAllRegisters(void) const
Returns all registers.
TRITON_EXPORT bool isGPR(triton::arch::register_e regId) const
Returns true if regId is a GRP.
TRITON_EXPORT triton::uint512 getConcreteRegisterValue(const triton::arch::Register ®, bool execCallbacks=true) const
Returns the concrete value of a register.
triton::uint8 x26[triton::size::dword]
Concrete value of x26.
triton::uint8 x22[triton::size::dword]
Concrete value of x22.
TRITON_EXPORT const triton::arch::Register & getRegister(triton::arch::register_e id) const
Returns register from id.
triton::uint8 f6[triton::size::qword]
Concrete value of f6.
TRITON_EXPORT void disassembly(triton::arch::Instruction &inst)
Disassembles the instruction according to the architecture.
triton::uint8 f20[triton::size::qword]
Concrete value of f20.
triton::uint8 f23[triton::size::qword]
Concrete value of f23.
TRITON_EXPORT bool isConcreteMemoryValueDefined(const triton::arch::MemoryAccess &mem) const
Returns true if memory cells have a defined concrete value.
triton::uint8 x19[triton::size::dword]
Concrete value of x19.
triton::uint8 f12[triton::size::qword]
Concrete value of f12.
triton::uint8 f3[triton::size::qword]
Concrete value of f3.
triton::uint8 x6[triton::size::dword]
Concrete value of x6.
TRITON_EXPORT riscv32Cpu & operator=(const riscv32Cpu &other)
Copies a riscv32Cpu class.
triton::uint8 x29[triton::size::dword]
Concrete value of x29.
triton::uint8 f2[triton::size::qword]
Concrete value of f2.
triton::uint8 x25[triton::size::dword]
Concrete value of x25.
TRITON_EXPORT bool isRegister(triton::arch::register_e regId) const
Returns true if the register ID is a register.
triton::uint8 pc[triton::size::dword]
Concrete value of pc.
triton::uint8 x24[triton::size::dword]
Concrete value of x24.
triton::uint8 f17[triton::size::qword]
Concrete value of f17.
TRITON_EXPORT std::set< const triton::arch::Register * > getParentRegisters(void) const
Returns all parent registers.
std::unordered_map< triton::uint64, triton::uint8, IdentityHash< triton::uint64 > > memory
map of address -> concrete value
triton::uint8 x9[triton::size::dword]
Concrete value of x9.
TRITON_EXPORT void clear(void)
Clears the architecture states (registers and memory).
triton::uint8 f24[triton::size::qword]
Concrete value of f24.
triton::uint8 f26[triton::size::qword]
Concrete value of f26.
TRITON_EXPORT const triton::arch::Register & getStackPointer(void) const
Returns the stack pointer register.
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 bool isRegisterValid(triton::arch::register_e regId) const
Returns true if the register ID is valid.
triton::uint8 x18[triton::size::dword]
Concrete value of x18.
triton::uint8 x7[triton::size::dword]
Concrete value of x7.
triton::uint8 f21[triton::size::qword]
Concrete value of f21.
triton::uint8 x5[triton::size::dword]
Concrete value of x5.
triton::uint8 x4[triton::size::dword]
Concrete value of x4.
triton::uint8 x21[triton::size::dword]
Concrete value of x21.
triton::uint8 x8[triton::size::dword]
Concrete value of x8.
TRITON_EXPORT triton::arch::endianness_e getEndianness(void) const
Returns the kind of endianness as triton::arch::endianness_e.
TRITON_EXPORT triton::uint32 gprSize(void) const
Returns the bit in byte of the General Purpose Registers.
triton::uint8 f4[triton::size::qword]
Concrete value of f4.
TRITON_EXPORT triton::uint32 gprBitSize(void) const
Returns the bit in bit of the General Purpose Registers.
TRITON_EXPORT bool isFPU(triton::arch::register_e regId) const
Returns true if regId is a FPU register.
triton::uint8 f22[triton::size::qword]
Concrete value of f22.
triton::uint8 f16[triton::size::qword]
Concrete value of f16.
triton::uint8 f10[triton::size::qword]
Concrete value of f10.
triton::uint8 f29[triton::size::qword]
Concrete value of f29.
triton::uint8 x11[triton::size::dword]
Concrete value of x11.
triton::uint8 f15[triton::size::qword]
Concrete value of f15.
triton::uint8 x23[triton::size::dword]
Concrete value of x23.
triton::uint8 x27[triton::size::dword]
Concrete value of x27.
triton::uint8 f31[triton::size::qword]
Concrete value of f31.
virtual TRITON_EXPORT ~riscv32Cpu()
Destructor.
triton::uint8 f18[triton::size::qword]
Concrete value of f18.
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 riscv32Cpu(triton::callbacks::Callbacks *callbacks=nullptr)
Constructor.
TRITON_EXPORT bool isMemoryExclusive(const triton::arch::MemoryAccess &mem) const
Returns true if the given memory access is tagged as exclusive. Only valid for Arm32 and AArch64.
TRITON_EXPORT const triton::arch::Register & getParentRegister(const triton::arch::Register ®) const
Returns parent register from a given one.
TRITON_EXPORT const triton::arch::Register & getProgramCounter(void) const
Returns the program counter register.
triton::uint8 x30[triton::size::dword]
Concrete value of x30.
TRITON_EXPORT const std::unordered_map< triton::uint64, triton::uint8, IdentityHash< triton::uint64 > > & getConcreteMemory(void) const
Return all memory.
triton::uint8 x1[triton::size::dword]
Concrete value of x1.
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::uint8 x17[triton::size::dword]
Concrete value of x17.
triton::uint8 f5[triton::size::qword]
Concrete value of f5.
triton::uint8 x3[triton::size::dword]
Concrete value of x3.
triton::uint8 f13[triton::size::qword]
Concrete value of f13.
triton::uint8 f28[triton::size::qword]
Concrete value of f28.
triton::uint8 f1[triton::size::qword]
Concrete value of f1.
TRITON_EXPORT void clearConcreteMemoryValue(const triton::arch::MemoryAccess &mem)
Clears concrete values assigned to the memory cells.
triton::uint8 f9[triton::size::qword]
Concrete value of f9.
triton::uint8 f14[triton::size::qword]
Concrete value of f14.
triton::uint8 x16[triton::size::dword]
Concrete value of x16.
triton::uint8 x28[triton::size::dword]
Concrete value of x28.
TRITON_EXPORT triton::uint512 getConcreteMemoryValue(const triton::arch::MemoryAccess &mem, bool execCallbacks=true) const
Returns the concrete value of memory cells.
triton::uint8 f8[triton::size::qword]
Concrete value of f8.
triton::uint8 f19[triton::size::qword]
Concrete value of f19.
triton::uint8 f27[triton::size::qword]
Concrete value of f27.
TRITON_EXPORT void setMemoryExclusiveTag(const triton::arch::MemoryAccess &mem, bool tag)
Sets exclusive memory access tag. Only valid for Arm32 and AArch64.
triton::uint8 f7[triton::size::qword]
Concrete value of f7.
triton::uint8 f30[triton::size::qword]
Concrete value of f30.
The riscvSpecifications class defines specifications about the RV32 and RV64 CPU.
register_e
Types of register.
constexpr triton::uint32 dword
dword size in byte
constexpr triton::uint32 qword
qword size in byte
std::size_t usize
unsigned MAX_INT 32 or 64 bits according to the CPU.
std::uint64_t uint64
unisgned 64-bits
std::uint32_t uint32
unisgned 32-bits
std::uint8_t uint8
unisgned 8-bits