Hi !
I'm considering using your crate to use a "standard" definition of x86 registers in my project.
My goal is to do Virtual Machine Introspection (VMI), and I would like to read the registers of a VM on Xen, KVM or VirtualBox with a Rust API (libmicrovmi)
I looked at your docs, but I couldn't find a structure that would define the x86 registers.
There is indeed a module that defines the MSR constants, but what I would like is a structure that would contains all x86 standard registers.
For example on the Libvmi (C) library:
/*
* Commonly used x86 registers
*/
typedef struct x86_regs {
uint64_t rax;
uint64_t rcx;
uint64_t rdx;
uint64_t rbx;
uint64_t rsp;
uint64_t rbp;
uint64_t rsi;
uint64_t rdi;
uint64_t r8;
uint64_t r9;
uint64_t r10;
uint64_t r11;
uint64_t r12;
uint64_t r13;
uint64_t r14;
uint64_t r15;
uint64_t rflags;
uint64_t dr6;
uint64_t dr7;
uint64_t rip;
uint64_t cr0;
uint64_t cr2;
uint64_t cr3;
uint64_t cr4;
uint64_t sysenter_cs;
uint64_t sysenter_esp;
uint64_t sysenter_eip;
uint64_t msr_efer;
uint64_t msr_star;
uint64_t msr_lstar;
uint64_t msr_pat;
uint64_t msr_cstar;
uint64_t fs_base;
uint64_t fs_limit;
uint64_t fs_sel;
uint64_t fs_arbytes;
uint64_t gs_base;
uint64_t gs_limit;
uint64_t gs_sel;
uint64_t gs_arbytes;
uint64_t cs_base;
uint64_t cs_limit;
uint64_t cs_sel;
uint32_t cs_arbytes;
uint64_t ss_base;
uint64_t ss_limit;
uint64_t ss_sel;
uint64_t ss_arbytes;
uint64_t ds_base;
uint64_t ds_limit;
uint64_t ds_sel;
uint64_t ds_arbytes;
uint64_t es_base;
uint64_t es_limit;
uint64_t es_sel;
uint64_t es_arbytes;
uint64_t shadow_gs;
uint64_t idtr_base;
uint64_t idtr_limit;
uint64_t gdtr_base;
uint64_t gdtr_limit;
uint32_t _pad;
} x86_registers_t;
typedef struct arm_registers {
uint64_t ttbr0;
uint64_t ttbr1;
uint64_t ttbcr;
uint64_t pc;
uint32_t cpsr;
uint32_t _pad;
} arm_registers_t;
typedef struct registers {
union {
x86_registers_t x86;
arm_registers_t arm;
};
} registers_t;
Can you add such a structure to provide a standard definition of x86 registers in a crate ?
What do you think ?
Thank you for this crate !
Hi !
I'm considering using your crate to use a "standard" definition of x86 registers in my project.
My goal is to do Virtual Machine Introspection (VMI), and I would like to read the registers of a VM on Xen, KVM or VirtualBox with a Rust API (libmicrovmi)
I looked at your docs, but I couldn't find a structure that would define the x86 registers.
There is indeed a module that defines the MSR constants, but what I would like is a structure that would contains all x86 standard registers.
For example on the Libvmi (C) library:
Can you add such a structure to provide a standard definition of x86 registers in a crate ?
What do you think ?
Thank you for this crate !