about summary refs log tree commit diff stats
path: root/src/miasm/jitter/arch/JitCore_x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/miasm/jitter/arch/JitCore_x86.h')
-rw-r--r--src/miasm/jitter/arch/JitCore_x86.h136
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;