Arion 1.0.2-alpha
A high-performance C++ framework for emulating executable binaries.
 
Loading...
Searching...
No Matches
lnx_arch_arm64.hpp
Go to the documentation of this file.
1#ifndef ARION_LNX_ARCH_ARM64_HPP
2#define ARION_LNX_ARCH_ARM64_HPP
3
7
9{
10
13{
15 __u64 regs[31];
17 __u64 sp;
19 __u64 pc;
21 __u64 pstate;
22};
23
25inline std::vector<arion::REG> uc_user_pt_regs = {
26 UC_ARM64_REG_X0, UC_ARM64_REG_X1, UC_ARM64_REG_X2, UC_ARM64_REG_X3, UC_ARM64_REG_X4, UC_ARM64_REG_X5,
27 UC_ARM64_REG_X6, UC_ARM64_REG_X7, UC_ARM64_REG_X8, UC_ARM64_REG_X9, UC_ARM64_REG_X10, UC_ARM64_REG_X11,
28 UC_ARM64_REG_X12, UC_ARM64_REG_X13, UC_ARM64_REG_X14, UC_ARM64_REG_X15, UC_ARM64_REG_X16, UC_ARM64_REG_X17,
29 UC_ARM64_REG_X18, UC_ARM64_REG_X19, UC_ARM64_REG_X20, UC_ARM64_REG_X21, UC_ARM64_REG_X22, UC_ARM64_REG_X23,
30 UC_ARM64_REG_X24, UC_ARM64_REG_X25, UC_ARM64_REG_X26, UC_ARM64_REG_X27, UC_ARM64_REG_X28, UC_ARM64_REG_X29,
31 UC_ARM64_REG_X30, UC_ARM64_REG_SP, UC_ARM64_REG_PC, UC_ARM64_REG_PSTATE};
32
35{
37 uint64_t fp;
39 uint64_t lr;
40};
41
44{
48 uint64_t type;
49};
50
52struct pt_regs
53{
55 union {
59 struct
60 {
61 uint64_t regs[31];
62 uint64_t sp;
63 uint64_t pc;
64 uint64_t pstate;
65 };
66 };
68 uint64_t orig_x0;
70 int32_t syscallno;
72 uint32_t pmr;
73
75 uint64_t sdei_ttbr1;
78
82 uint64_t exit_rcu;
83};
84
86const size_t ELF_NGREG = (sizeof(struct user_pt_regs) / sizeof(arion_lnx_type::elf_greg_t));
89
100
103{
105 __uint128_t vregs[32];
107 __u32 fpsr;
109 __u32 fpcr;
111 __u32 __reserved[2];
112};
113
115inline std::vector<arion::REG> uc_fpsimd_regs = {
116 UC_ARM64_REG_V0, UC_ARM64_REG_V1, UC_ARM64_REG_V2, UC_ARM64_REG_V3, UC_ARM64_REG_V4, UC_ARM64_REG_V5,
117 UC_ARM64_REG_V6, UC_ARM64_REG_V7, UC_ARM64_REG_V8, UC_ARM64_REG_V9, UC_ARM64_REG_V10, UC_ARM64_REG_V11,
118 UC_ARM64_REG_V12, UC_ARM64_REG_V13, UC_ARM64_REG_V14, UC_ARM64_REG_V15, UC_ARM64_REG_V16, UC_ARM64_REG_V17,
119 UC_ARM64_REG_V18, UC_ARM64_REG_V19, UC_ARM64_REG_V20, UC_ARM64_REG_V21, UC_ARM64_REG_V22, UC_ARM64_REG_V23,
120 UC_ARM64_REG_V24, UC_ARM64_REG_V25, UC_ARM64_REG_V26, UC_ARM64_REG_V27, UC_ARM64_REG_V28, UC_ARM64_REG_V29,
121 UC_ARM64_REG_V30, UC_ARM64_REG_V31};
122
125
128{
129 private:
135 std::map<arion::REG, arion::RVAL> prstatus_to_regs(std::vector<arion::BYTE> prstatus) override;
141 std::map<arion::REG, arion::RVAL> fpregset_to_regs(std::vector<arion::BYTE> fpregset) override;
142};
143
144}; // namespace arion_lnx_arm64
145
146#endif // ARION_LNX_ARCH_ARM64_HPP
Abstract base class for managing Linux architecture-specific details, particularly for core dump pars...
Definition lnx_arch_manager.hpp:28
A class responsible for performing architecture specific operations in case of an ARM64 chip emulatio...
Definition arch_arm64.hpp:614
Linux AArch64 architecture manager class for Arion.
Definition lnx_arch_arm64.hpp:128
std::map< arion::REG, arion::RVAL > fpregset_to_regs(std::vector< arion::BYTE > fpregset) override
std::map< arion::REG, arion::RVAL > prstatus_to_regs(std::vector< arion::BYTE > prstatus) override
Definition lnx_arch_arm64.hpp:9
const size_t ELF_NGREG
The number of 64-bit words (general registers) in the user-visible user_pt_regs structure,...
Definition lnx_arch_arm64.hpp:86
std::vector< arion::REG > uc_fpsimd_regs
A vector mapping the FPSIMD vector registers to ARION's universal register enumeration (arion::REG).
Definition lnx_arch_arm64.hpp:115
std::vector< arion::REG > uc_user_pt_regs
A vector mapping the user_pt_regs fields to ARION's universal register enumeration (arion::REG).
Definition lnx_arch_arm64.hpp:25
arion_lnx_type::elf_greg_t elf_gregset_t[ELF_NGREG]
Definition of the general-purpose register set type for ELF notes (NT_PRSTATUS).
Definition lnx_arch_arm64.hpp:88
Definition lnx_kernel_utils.hpp:16
unsigned long elf_greg_t
Type definition for a single general-purpose register value in an ELF core dump.
Definition lnx_kernel_utils.hpp:100
Structure for a process status ELF note (NT_PRSTATUS) for AArch64, containing general registers.
Definition lnx_arch_arm64.hpp:92
int pr_fpvalid
Flag indicating whether floating-point registers are valid.
Definition lnx_arch_arm64.hpp:98
elf_gregset_t pr_reg
The general-purpose registers captured.
Definition lnx_arch_arm64.hpp:96
Structure combining a frame record with additional metadata.
Definition lnx_arch_arm64.hpp:44
uint64_t type
Metadata type information.
Definition lnx_arch_arm64.hpp:48
struct frame_record record
The frame pointer and link register values.
Definition lnx_arch_arm64.hpp:46
Structure representing a frame record in the AArch64 stack unwind mechanism.
Definition lnx_arch_arm64.hpp:35
uint64_t lr
Link Register (LR/X30).
Definition lnx_arch_arm64.hpp:39
uint64_t fp
Frame Pointer (FP/X29).
Definition lnx_arch_arm64.hpp:37
Structure representing the full kernel-internal AArch64 register state.
Definition lnx_arch_arm64.hpp:53
struct frame_record_meta stackframe
Stack frame metadata.
Definition lnx_arch_arm64.hpp:77
uint64_t sp
Definition lnx_arch_arm64.hpp:62
uint64_t exit_rcu
RCU (Read-Copy-Update) exit counter.
Definition lnx_arch_arm64.hpp:82
uint64_t sdei_ttbr1
Security Device-Enabled Interrupts (SDEI) translation table base register 1.
Definition lnx_arch_arm64.hpp:75
int32_t syscallno
The system call number.
Definition lnx_arch_arm64.hpp:70
struct user_pt_regs user_regs
The standard user register set.
Definition lnx_arch_arm64.hpp:57
uint64_t orig_x0
Original value of X0 before a syscall.
Definition lnx_arch_arm64.hpp:68
uint64_t lockdep_hardirqs
Lock dependency tracking for hard interrupts.
Definition lnx_arch_arm64.hpp:80
uint64_t regs[31]
Definition lnx_arch_arm64.hpp:61
uint32_t pmr
Performance Monitoring Register (PMR).
Definition lnx_arch_arm64.hpp:72
uint64_t pc
Definition lnx_arch_arm64.hpp:63
uint64_t pstate
Definition lnx_arch_arm64.hpp:64
Structure representing the AArch64 Floating-Point and SIMD (FPSIMD) state.
Definition lnx_arch_arm64.hpp:103
__u32 fpsr
Floating-Point Status Register.
Definition lnx_arch_arm64.hpp:107
__uint128_t vregs[32]
Vector registers V0 to V31 (128-bit each).
Definition lnx_arch_arm64.hpp:105
__u32 __reserved[2]
Reserved padding.
Definition lnx_arch_arm64.hpp:111
__u32 fpcr
Floating-Point Control Register.
Definition lnx_arch_arm64.hpp:109
Structure representing the user-space view of AArch64 general registers saved by the kernel.
Definition lnx_arch_arm64.hpp:13
__u64 sp
Stack Pointer (SP).
Definition lnx_arch_arm64.hpp:17
__u64 pstate
Process State (PSTATE) register.
Definition lnx_arch_arm64.hpp:21
__u64 pc
Program Counter (PC).
Definition lnx_arch_arm64.hpp:19
__u64 regs[31]
General-purpose registers X0 to X30.
Definition lnx_arch_arm64.hpp:15
Common fields shared across architecture-specific elf_prstatus structures in core dumps.
Definition lnx_kernel_utils.hpp:72