blob: 5c005e869201b928a4a752a3331bb9df93e214e9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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;
|