Arion 1.0.2-alpha
A high-performance C++ framework for emulating executable binaries.
 
Loading...
Searching...
No Matches
arion_arm64 Namespace Reference

Classes

class  ArchManagerARM64
 A class responsible for performing architecture specific operations in case of an ARM64 chip emulation. More...
 

Variables

std::map< uint64_t, std::string > NAME_BY_SYSCALL_NO
 A map identifying an ARM64 syscall name given its number.
 
std::map< std::string, arion::REGARCH_REGS
 A map identifying a Unicorn ARM64 register given its name.
 
std::map< arion::REG, uint8_t > ARCH_REGS_SZ
 A map identifying a Unicorn ARM64 register size given the register.
 
std::vector< arion::REGCTXT_REGS
 The list of high-level ARM64 registers that make up the context to be saved and restored.
 
std::map< uint64_t, arion::CPU_INTRIDT = {}
 The ARM64 Interrupt Descriptor Table.
 
arion::ABI_REGISTERS ABI_REGS = arion::ABI_REGISTERS(UC_ARM64_REG_PC, UC_ARM64_REG_SP)
 Unicorn ARM64 PC and SP registers for genericity.
 
arion::ABI_CALLING_CONVENTION ABI_CALLING_CONV
 Unicorn ARM64 registers involved in calling convention.
 
arion::ABI_SYSCALLING_CONVENTION ABI_SYSCALLING_CONV
 Unicorn ARM64 registers involved in syscalling convention.
 
arion::KERNEL_SEG_FLAGS SEG_FLAGS = 0
 ARM64 flags telling the loader which kernel segments should be mapped in memory.
 
uint32_t HWCAP2 = 0
 Some well working ARM64 chip HWCAP2 value.
 
uint32_t HWCAP = 0x78bfafd
 Some well working ARM64 chip HWCAP value.
 
const size_t PTR_SZ = 8
 Size in bytes of a pointer in an ARM64 chip.
 
const uint16_t ARCH_SZ = 64
 Size in bits of the ARM64 general-purpose registers.
 
arion::CPU_ARCH ARCH = arion::CPU_ARCH::ARM64_ARCH
 Arion CPU_ARCH for ARM64.
 
arion::ARCH_ATTRIBUTES ARCH_ATTRS
 Multiple architecture specific attributes for ARM64, grouped in a structure for genericity purpose.
 

Variable Documentation

◆ ABI_CALLING_CONV

arion::ABI_CALLING_CONVENTION arion_arm64::ABI_CALLING_CONV
inline
Initial value:
UC_ARM64_REG_X0, {UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4,
UC_ARM64_REG_X5, UC_ARM64_REG_X6, UC_ARM64_REG_X7})
Unicorn registers involved in calling convention.
Definition arch_manager.hpp:52

Unicorn ARM64 registers involved in calling convention.

◆ ABI_REGS

arion::ABI_REGISTERS arion_arm64::ABI_REGS = arion::ABI_REGISTERS(UC_ARM64_REG_PC, UC_ARM64_REG_SP)
inline

Unicorn ARM64 PC and SP registers for genericity.

◆ ABI_SYSCALLING_CONV

arion::ABI_SYSCALLING_CONVENTION arion_arm64::ABI_SYSCALLING_CONV
inline
Initial value:
UC_ARM64_REG_X8, UC_ARM64_REG_X0,
{UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4, UC_ARM64_REG_X5})
Unicorn registers involved in syscalling convention.
Definition arch_manager.hpp:68

Unicorn ARM64 registers involved in syscalling convention.

◆ ARCH

arion::CPU_ARCH arion_arm64::ARCH = arion::CPU_ARCH::ARM64_ARCH
inline

Arion CPU_ARCH for ARM64.

◆ ARCH_ATTRS

arion::ARCH_ATTRIBUTES arion_arm64::ARCH_ATTRS
inline
Initial value:
=
arion::ARCH_ATTRIBUTES(ARCH, ARCH_SZ, PTR_SZ, HWCAP, HWCAP2, SEG_FLAGS, ABI_REGS, ABI_CALLING_CONV,
ABI_SYSCALLING_CONV, NAME_BY_SYSCALL_NO)
Multiple architecture specific attributes, grouped in a structure for genericity purpose.
Definition arch_manager.hpp:87

Multiple architecture specific attributes for ARM64, grouped in a structure for genericity purpose.

◆ ARCH_REGS

std::map<std::string, arion::REG> arion_arm64::ARCH_REGS
inline

A map identifying a Unicorn ARM64 register given its name.

◆ ARCH_REGS_SZ

std::map<arion::REG, uint8_t> arion_arm64::ARCH_REGS_SZ
inline

A map identifying a Unicorn ARM64 register size given the register.

◆ ARCH_SZ

const uint16_t arion_arm64::ARCH_SZ = 64
inline

Size in bits of the ARM64 general-purpose registers.

◆ CTXT_REGS

std::vector<arion::REG> arion_arm64::CTXT_REGS
inline
Initial value:
= {
UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4, UC_ARM64_REG_X5,
UC_ARM64_REG_X6, UC_ARM64_REG_X7, UC_ARM64_REG_X8, UC_ARM64_REG_X9, UC_ARM64_REG_X10, UC_ARM64_REG_X11,
UC_ARM64_REG_X12, UC_ARM64_REG_X13, UC_ARM64_REG_X14, UC_ARM64_REG_X15, UC_ARM64_REG_X16, UC_ARM64_REG_X17,
UC_ARM64_REG_X18, UC_ARM64_REG_X19, UC_ARM64_REG_X20, UC_ARM64_REG_X21, UC_ARM64_REG_X22, UC_ARM64_REG_X23,
UC_ARM64_REG_X24, UC_ARM64_REG_X25, UC_ARM64_REG_X26, UC_ARM64_REG_X27, UC_ARM64_REG_X28, UC_ARM64_REG_X29,
UC_ARM64_REG_X30, UC_ARM64_REG_SP, UC_ARM64_REG_PC, UC_ARM64_REG_NZCV, UC_ARM64_REG_FPCR, UC_ARM64_REG_FPSR,
UC_ARM64_REG_V0, UC_ARM64_REG_V1, UC_ARM64_REG_V2, UC_ARM64_REG_V3, UC_ARM64_REG_V4, UC_ARM64_REG_V5,
UC_ARM64_REG_V6, UC_ARM64_REG_V7, UC_ARM64_REG_V8, UC_ARM64_REG_V9, UC_ARM64_REG_V10, UC_ARM64_REG_V11,
UC_ARM64_REG_V12, UC_ARM64_REG_V13, UC_ARM64_REG_V14, UC_ARM64_REG_V15, UC_ARM64_REG_V16, UC_ARM64_REG_V17,
UC_ARM64_REG_V18, UC_ARM64_REG_V19, UC_ARM64_REG_V20, UC_ARM64_REG_V21, UC_ARM64_REG_V22, UC_ARM64_REG_V23,
UC_ARM64_REG_V24, UC_ARM64_REG_V25, UC_ARM64_REG_V26, UC_ARM64_REG_V27, UC_ARM64_REG_V28, UC_ARM64_REG_V29,
UC_ARM64_REG_V30, UC_ARM64_REG_V31}

The list of high-level ARM64 registers that make up the context to be saved and restored.

◆ HWCAP

uint32_t arion_arm64::HWCAP = 0x78bfafd
inline

Some well working ARM64 chip HWCAP value.

◆ HWCAP2

uint32_t arion_arm64::HWCAP2 = 0
inline

Some well working ARM64 chip HWCAP2 value.

◆ IDT

std::map<uint64_t, arion::CPU_INTR> arion_arm64::IDT = {}
inline

The ARM64 Interrupt Descriptor Table.

◆ NAME_BY_SYSCALL_NO

std::map<uint64_t, std::string> arion_arm64::NAME_BY_SYSCALL_NO
inline

A map identifying an ARM64 syscall name given its number.

◆ PTR_SZ

const size_t arion_arm64::PTR_SZ = 8
inline

Size in bytes of a pointer in an ARM64 chip.

◆ SEG_FLAGS

arion::KERNEL_SEG_FLAGS arion_arm64::SEG_FLAGS = 0
inline

ARM64 flags telling the loader which kernel segments should be mapped in memory.