diff options
Diffstat (limited to 'src/miasm/jitter/arch/JitCore_x86.h')
| -rw-r--r-- | src/miasm/jitter/arch/JitCore_x86.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/miasm/jitter/arch/JitCore_x86.h b/src/miasm/jitter/arch/JitCore_x86.h new file mode 100644 index 00000000..5c005e86 --- /dev/null +++ b/src/miasm/jitter/arch/JitCore_x86.h @@ -0,0 +1,136 @@ +#include "../bn.h" + +#if _WIN32 +#define _MIASM_EXPORT __declspec(dllexport) +#else +#define _MIASM_EXPORT +#endif + +struct vm_cpu { + uint32_t exception_flags; + uint32_t interrupt_num; + + + /* gpregs */ + uint64_t RAX; + uint64_t RBX; + uint64_t RCX; + uint64_t RDX; + uint64_t RSI; + uint64_t RDI; + uint64_t RSP; + uint64_t RBP; + 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 RIP; + + /* eflag */ + uint8_t zf; + uint8_t nf; + uint8_t pf; + uint8_t of; + uint8_t cf; + uint8_t af; + uint8_t df; + + uint8_t tf; + uint8_t i_f; + uint8_t iopl_f; + uint8_t nt; + uint8_t rf; + uint8_t vm; + uint8_t ac; + uint8_t vif; + uint8_t vip; + uint8_t i_d; + + bn_t my_tick; + + bn_t cond; + + uint64_t float_st0; + uint64_t float_st1; + uint64_t float_st2; + uint64_t float_st3; + uint64_t float_st4; + uint64_t float_st5; + uint64_t float_st6; + uint64_t float_st7; + + unsigned int float_c0; + unsigned int float_c1; + unsigned int float_c2; + unsigned int float_c3; + + + unsigned int float_stack_ptr; + + unsigned int reg_float_control; + + unsigned int reg_float_eip; + unsigned int reg_float_cs; + unsigned int reg_float_address; + unsigned int reg_float_ds; + + + uint64_t tsc; + + + uint16_t ES; + uint16_t CS; + uint16_t SS; + uint16_t DS; + uint16_t FS; + uint16_t GS; + + unsigned int cr0; + unsigned int cr3; + + uint64_t MM0; + uint64_t MM1; + uint64_t MM2; + uint64_t MM3; + uint64_t MM4; + uint64_t MM5; + uint64_t MM6; + uint64_t MM7; + + /* SSE */ + bn_t XMM0; + bn_t XMM1; + bn_t XMM2; + bn_t XMM3; + bn_t XMM4; + bn_t XMM5; + bn_t XMM6; + bn_t XMM7; + bn_t XMM8; + bn_t XMM9; + bn_t XMM10; + bn_t XMM11; + bn_t XMM12; + bn_t XMM13; + bn_t XMM14; + bn_t XMM15; + + uint64_t segm_base[0x10000]; + +}; + +_MIASM_EXPORT void dump_gpregs_32(struct vm_cpu* vmcpu); +_MIASM_EXPORT void dump_gpregs_64(struct vm_cpu* vmcpu); +_MIASM_EXPORT uint64_t segm2addr(JitCpu* jitcpu, uint64_t segm, uint64_t addr); + +_MIASM_EXPORT void MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src); +_MIASM_EXPORT void MEM_WRITE_16(JitCpu* jitcpu, uint64_t addr, uint16_t src); +_MIASM_EXPORT void MEM_WRITE_32(JitCpu* jitcpu, uint64_t addr, uint32_t src); +_MIASM_EXPORT void MEM_WRITE_64(JitCpu* jitcpu, uint64_t addr, uint64_t src); + +#define RETURN_PC return BlockDst; |