Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
vm_mngr.h
Go to the documentation of this file.
1 /*
2 ** Copyright (C) 2011 EADS France, Fabrice Desclaux <fabrice.desclaux@eads.net>
3 **
4 ** This program is free software; you can redistribute it and/or modify
5 ** it under the terms of the GNU General Public License as published by
6 ** the Free Software Foundation; either version 2 of the License, or
7 ** (at your option) any later version.
8 **
9 ** This program is distributed in the hope that it will be useful,
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ** GNU General Public License for more details.
13 **
14 ** You should have received a copy of the GNU General Public License along
15 ** with this program; if not, write to the Free Software Foundation, Inc.,
16 ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 */
18 #ifndef CODENAT_H
19 #define CODENAT_H
20 
21 #ifdef __APPLE__
22 #define __BYTE_ORDER __BYTE_ORDER__
23 #elif defined(__NetBSD__)
24 #define __BYTE_ORDER _BYTE_ORDER
25 #define __BIG_ENDIAN _BIG_ENDIAN
26 #define __LITTLE_ENDIAN _LITTLE_ENDIAN
27 #endif
28 
29 #define Endian16_Swap(value) \
30  ((((uint16_t)((value) & 0x00FF)) << 8) | \
31  (((uint16_t)((value) & 0xFF00)) >> 8))
32 
33 #define Endian32_Swap(value) \
34  ((((uint32_t)((value) & 0x000000FF)) << 24) | \
35  (((uint32_t)((value) & 0x0000FF00)) << 8) | \
36  (((uint32_t)((value) & 0x00FF0000)) >> 8) | \
37  (((uint32_t)((value) & 0xFF000000)) >> 24))
38 
39 #define Endian64_Swap(value) \
40  (((((uint64_t)value)<<56) & 0xFF00000000000000ULL) | \
41  ((((uint64_t)value)<<40) & 0x00FF000000000000ULL) | \
42  ((((uint64_t)value)<<24) & 0x0000FF0000000000ULL) | \
43  ((((uint64_t)value)<< 8) & 0x000000FF00000000ULL) | \
44  ((((uint64_t)value)>> 8) & 0x00000000FF000000ULL) | \
45  ((((uint64_t)value)>>24) & 0x0000000000FF0000ULL) | \
46  ((((uint64_t)value)>>40) & 0x000000000000FF00ULL) | \
47  ((((uint64_t)value)>>56) & 0x00000000000000FFULL))
48 
49 
50 
51 
52 LIST_HEAD(memory_page_list_head, memory_page_node);
53 LIST_HEAD(code_bloc_list_head, code_bloc_node);
54 LIST_HEAD(memory_breakpoint_info_head, memory_breakpoint_info);
55 
56 
57 #define BREAKPOINT_READ 1
58 #define BREAKPOINT_WRITE 2
59 
60 #define BREAK_SIGALARM 1<<5
61 
62 #define MAX_MEMORY_PAGE_POOL_TAB 0x100000
63 #define MEMORY_PAGE_POOL_MASK_BIT 12
64 #define PAGE_SIZE (1<<MEMORY_PAGE_POOL_MASK_BIT)
65 #define VM_BIG_ENDIAN 1
66 #define VM_LITTLE_ENDIAN 2
67 
68 typedef struct {
69  int sex;
70  struct memory_page_list_head memory_page_pool;
71  struct code_bloc_list_head code_bloc_pool;
72  struct memory_breakpoint_info_head memory_breakpoint_pool;
73 
74  struct memory_page_node *memory_page_pool_tab[MAX_MEMORY_PAGE_POOL_TAB];
75 
76  unsigned int *code_addr_tab;
77  unsigned int code_bloc_pool_ad_min;
78  unsigned int code_bloc_pool_ad_max;
79 
80  uint64_t exception_flags;
82  PyObject *addr2obj;
83 }vm_mngr_t;
84 
85 
86 
87 typedef struct {
88  PyObject *func;
90 
91 
92 
93 
94 //extern vm_mngr_t vmmngr;
95 
97  uint64_t ad;
98  uint64_t size;
99  uint64_t access;
100  void* ad_hp;
102 };
103 
104 
105 
107  uint64_t ad_start;
108  uint64_t ad_stop;
109  uint64_t ad_code;
110  LIST_ENTRY(code_bloc_node) next;
111 };
112 
113 
115  uint64_t ad;
116  uint64_t size;
117  uint64_t access;
118  LIST_ENTRY(memory_breakpoint_info) next;
119 };
120 
121 
122 
123 #define PAGE_READ 1
124 #define PAGE_WRITE 2
125 #define PAGE_EXEC 4
126 
127 #define EXCEPT_DO_NOT_UPDATE_PC (1<<25)
128 
129 // interrupt with eip update after instr
130 #define EXCEPT_CODE_AUTOMOD (1<<0)
131 #define EXCEPT_SOFT_BP (1<<1)
132 #define EXCEPT_INT_XX (1<<2)
133 
134 #define EXCEPT_BREAKPOINT_INTERN (1<<10)
135 
136 #define EXCEPT_NUM_UPDT_EIP (1<<11)
137 // interrupt with eip at instr
138 #define EXCEPT_UNK_MEM_AD ((1<<12) | EXCEPT_DO_NOT_UPDATE_PC)
139 #define EXCEPT_THROW_SEH ((1<<13) | EXCEPT_DO_NOT_UPDATE_PC)
140 #define EXCEPT_UNK_EIP ((1<<14) | EXCEPT_DO_NOT_UPDATE_PC)
141 #define EXCEPT_ACCESS_VIOL ((1<<14) | EXCEPT_DO_NOT_UPDATE_PC)
142 #define EXCEPT_INT_DIV_BY_ZERO ((1<<16) | EXCEPT_DO_NOT_UPDATE_PC)
143 #define EXCEPT_PRIV_INSN ((1<<17) | EXCEPT_DO_NOT_UPDATE_PC)
144 #define EXCEPT_ILLEGAL_INSN ((1<<18) | EXCEPT_DO_NOT_UPDATE_PC)
145 #define EXCEPT_UNK_MNEMO ((1<<19) | EXCEPT_DO_NOT_UPDATE_PC)
146 
147 
148 int is_mem_mapped(vm_mngr_t* vm_mngr, uint64_t ad);
149 uint64_t get_mem_base_addr(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t *addr_base);
150 unsigned int MEM_LOOKUP(vm_mngr_t* vm_mngr, unsigned int my_size, uint64_t addr);
151 
152 
153 void vm_MEM_WRITE_08(vm_mngr_t* vm_mngr, uint64_t addr, unsigned char src);
154 void vm_MEM_WRITE_16(vm_mngr_t* vm_mngr, uint64_t addr, unsigned short src);
155 void vm_MEM_WRITE_32(vm_mngr_t* vm_mngr, uint64_t addr, unsigned int src);
156 void vm_MEM_WRITE_64(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t src);
157 
158 
159 unsigned char vm_MEM_LOOKUP_08(vm_mngr_t* vm_mngr, uint64_t addr);
160 unsigned short vm_MEM_LOOKUP_16(vm_mngr_t* vm_mngr, uint64_t addr);
161 unsigned int vm_MEM_LOOKUP_32(vm_mngr_t* vm_mngr, uint64_t addr);
162 uint64_t vm_MEM_LOOKUP_64(vm_mngr_t* vm_mngr, uint64_t addr);
163 
164 
165 void MEM_WRITE_08_PASSTHROUGH(uint64_t addr, unsigned char src);
166 void MEM_WRITE_16_PASSTHROUGH(uint64_t addr, unsigned short src);
167 void MEM_WRITE_32_PASSTHROUGH(uint64_t addr, unsigned int src);
168 void MEM_WRITE_64_PASSTHROUGH(uint64_t addr, uint64_t src);
169 unsigned char MEM_LOOKUP_08_PASSTHROUGH(uint64_t addr);
170 unsigned short MEM_LOOKUP_16_PASSTHROUGH(uint64_t addr);
171 unsigned int MEM_LOOKUP_32_PASSTHROUGH(uint64_t addr);
172 uint64_t MEM_LOOKUP_64_PASSTHROUGH(uint64_t addr);
173 
174 int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, uint64_t size);
175 int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, uint64_t size);
176 
177 
178 unsigned int parity(unsigned int a);
179 unsigned int my_imul08(unsigned int a, unsigned int b);
180 
181 void vm_throw(vm_mngr_t* vm_mngr, unsigned long flags);
182 int shift_right_arith(unsigned int size, int a, unsigned int b);
183 
184 uint64_t shift_right_logic(uint64_t size, uint64_t a, uint64_t b);
185 uint64_t shift_left_logic(uint64_t size, uint64_t a, uint64_t b);
186 /*
187 int shift_left_logic_08(unsigned int a, unsigned int b);
188 int shift_left_logic_16(unsigned int a, unsigned int b);
189 int shift_left_logic_32(unsigned int a, unsigned int b);
190 */
191 unsigned int mul_lo_op(unsigned int size, unsigned int a, unsigned int b);
192 unsigned int mul_hi_op(unsigned int size, unsigned int a, unsigned int b);
193 unsigned int imul_lo_op_08(char a, char b);
194 unsigned int imul_lo_op_16(short a, short b);
195 unsigned int imul_lo_op_32(int a, int b);
196 int imul_hi_op_08(char a, char b);
197 int imul_hi_op_16(short a, short b);
198 int imul_hi_op_32(int a, int b);
199 
200 
201 unsigned int umul16_lo(unsigned short a, unsigned short b);
202 unsigned int umul16_hi(unsigned short a, unsigned short b);
203 
204 
205 unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
206 unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c);
207 uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b);
208 uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b);
209 int rcl_rez_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf);
210 int rcl_cf_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf);
211 
212 
213 #define UDIV(sizeA) \
214  uint ## sizeA ## _t udiv ## sizeA (vm_cpu_t* vmcpu, uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
215  { \
216  uint ## sizeA ## _t r; \
217  if (b == 0) { \
218  vmcpu->exception_flags |= EXCEPT_INT_DIV_BY_ZERO; \
219  return 0; \
220  } \
221  r = a/b; \
222  return r; \
223  }
224 
225 
226 #define UMOD(sizeA) \
227  uint ## sizeA ## _t umod ## sizeA (vm_cpu_t* vmcpu, uint ## sizeA ## _t a, uint ## sizeA ## _t b) \
228  { \
229  uint ## sizeA ## _t r; \
230  if (b == 0) { \
231  vmcpu->exception_flags |= EXCEPT_INT_DIV_BY_ZERO; \
232  return 0; \
233  } \
234  r = a%b; \
235  return r; \
236  }
237 
238 
239 #define IDIV(sizeA) \
240  int ## sizeA ## _t idiv ## sizeA (vm_cpu_t* vmcpu, int ## sizeA ## _t a, int ## sizeA ## _t b) \
241  { \
242  int ## sizeA ## _t r; \
243  if (b == 0) { \
244  vmcpu->exception_flags |= EXCEPT_INT_DIV_BY_ZERO; \
245  return 0; \
246  } \
247  r = a/b; \
248  return r; \
249  }
250 
251 
252 #define IMOD(sizeA) \
253  int ## sizeA ## _t imod ## sizeA (vm_cpu_t* vmcpu, int ## sizeA ## _t a, int ## sizeA ## _t b) \
254  { \
255  int ## sizeA ## _t r; \
256  if (b == 0) { \
257  vmcpu->exception_flags |= EXCEPT_INT_DIV_BY_ZERO; \
258  return 0; \
259  } \
260  r = a%b; \
261  return r; \
262  }
263 
264 
265 //PyObject* _vm_push_uint32_t(PyObject *item);
266 //PyObject* _vm_pop_uint32_t(void);
267 ////PyObject* _vm_put_str(PyObject *item);
268 //PyObject* _vm_set_mem(PyObject *item, PyObject *item_str);
269 //PyObject* _vm_set_mem_access(PyObject *addr, PyObject *access);
270 //PyObject* _vm_get_str(PyObject *item, PyObject *item_len);
271 //PyObject* _vm_add_memory_page(PyObject *item, PyObject *access, PyObject *item_str);
272 //PyObject* _vm_add_code_bloc(PyObject *item1, PyObject *item2);//, PyObject *item3);
273 //PyObject* _call_pyfunc_from_globals(char* funcname);
274 //PyObject* _call_pyfunc_from_eip(void);
275 //
276 //PyObject* call_pyfunc_from_globals(char* funcname);
277 //
278 //PyObject* _vm_get_gpreg(void);
279 
280 void hexdump(char* m, unsigned int l);
281 
282 struct code_bloc_node * create_code_bloc_node(uint64_t ad_start, uint64_t ad_stop);
283 void add_code_bloc(vm_mngr_t* vm_mngr, struct code_bloc_node* cbp);
284 
285 struct memory_page_node * create_memory_page_node(uint64_t ad, unsigned int size, unsigned int access);//memory_page* mp);
286 void init_memory_page_pool(vm_mngr_t* vm_mngr);
287 void init_code_bloc_pool(vm_mngr_t* vm_mngr);
288 void reset_memory_page_pool(vm_mngr_t* vm_mngr);
289 void reset_code_bloc_pool(vm_mngr_t* vm_mngr);
290 void dump_code_bloc_pool(vm_mngr_t* vm_mngr);
291 void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a);
292 
293 
294 void init_memory_breakpoint(vm_mngr_t* vm_mngr);
295 void reset_memory_breakpoint(vm_mngr_t* vm_mngr);
296 void add_memory_breakpoint(vm_mngr_t* vm_mngr, uint64_t ad, uint64_t size, unsigned int access);
297 void remove_memory_breakpoint(vm_mngr_t* vm_mngr, uint64_t ad, unsigned int access);
298 
299 void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn);
300 
301 void check_write_code_bloc(vm_mngr_t* vm_mngr, uint64_t my_size, uint64_t addr);
302 
303 
304 char* dump(vm_mngr_t* vm_mngr);
306 //PyObject* _vm_get_all_memory(void);
307 PyObject* addr2BlocObj(vm_mngr_t* vm_mngr, uint64_t addr);
308 
309 
310 
311 
312 /********************************************/
313 
314 //PyObject* _vm_get_cpu_state(void);
315 //PyObject* _vm_set_cpu_state(PyObject * s_cpustate);
316 
317 
318 //void memory_page_write(unsigned int my_size, uint64_t ad, unsigned int src);
319 //unsigned int memory_page_read(unsigned int my_size, uint64_t ad);
320 unsigned int get_memory_page_max_address(void);
321 unsigned int get_memory_page_max_user_address(void);
322 
323 
324 int is_mpn_in_tab(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a);
325 
326 
327 void _func_free(void);
328 void _func_alloc(void);
329 unsigned int _get_memory_page_max_address_py(void);
330 unsigned int _get_memory_page_max_user_address_py(void);
331 unsigned int _get_memory_page_from_min_ad_py(unsigned int size);
332 
333 void _func_malloc_memory_page(void);
334 void _func_free_memory_page(void);
337 void _func_loadlib_fake(void);
338 void _func_getproc_fake(void);
339 
340 
341 void func_free(void);
342 void func_alloc(void);
343 unsigned int get_memory_page_max_address_py(void);
344 unsigned int get_memory_page_max_user_address_py(void);
345 unsigned int get_memory_page_from_min_ad_py(unsigned int size);
347 void func_malloc_memory_page(void);
348 void func_free_memory_page(void);
351 void func_loadlib_fake(void);
352 void func_getproc_fake(void);
353 
354 
355 //PyObject* _vm_exec_bloc(PyObject* my_eip, PyObject* known_blocs);
356 
357 unsigned int cpuid(unsigned int a, unsigned int reg_num);
358 double int2double(unsigned int m);
359 //PyObject* _vm_exec_blocs(PyObject* my_eip);
360 
361 double fadd(double a, double b);
362 double fsub(double a, double b);
363 double fmul(double a, double b);
364 double fdiv(double a, double b);
365 double ftan(double a);
366 double frndint(double a);
367 double fsin(double a);
368 double fcos(double a);
369 double fscale(double a, double b);
370 double f2xm1(double a);
371 double fsqrt(double a);
372 double fabs(double a);
373 unsigned int fcom_c0(double a, double b);
374 unsigned int fcom_c1(double a, double b);
375 unsigned int fcom_c2(double a, double b);
376 unsigned int fcom_c3(double a, double b);
377 
378 
379 
380 double mem_32_to_double(unsigned int m);
381 double mem_64_to_double(uint64_t m);
382 double int_16_to_double(unsigned int m);
383 double int_32_to_double(unsigned int m);
384 double int_64_to_double(uint64_t m);
385 int32_t double_to_int_32(double d);
386 int64_t double_to_int_64(double d);
387 double fadd(double a, double b);
388 unsigned int double_to_mem_32(double d);
389 uint64_t double_to_mem_64(double d);
390 
391 unsigned int access_segment(unsigned int d);
392 unsigned int access_segment_ok(unsigned int d);
393 
394 unsigned int load_segment_limit(unsigned int d);
395 unsigned int load_segment_limit_ok(unsigned int d);
396 
397 unsigned int load_tr_segment_selector(unsigned int d);
398 #define shift_right_arith_08(a, b)\
399  ((((char)(a)) >> ((int)(b)&0x1f))&0xff)
400 #define shift_right_arith_16(a, b)\
401  ((((short)(a)) >> ((int)(b)&0x1f))&0xffff)
402 #define shift_right_arith_32(a, b)\
403  ((((int)(a)) >> ((int)(b)&0x1f))&0xffffffff)
404 
405 
406 #define shift_right_logic_08(a, b)\
407  ((((unsigned char)(a)) >> ((unsigned int)(b)&0x1f))&0xff)
408 #define shift_right_logic_16(a, b)\
409  ((((unsigned short)(a)) >> ((unsigned int)(b)&0x1f))&0xffff)
410 #define shift_right_logic_32(a, b)\
411  ((((unsigned int)(a)) >> ((unsigned int)(b)&0x1f))&0xffffffff)
412 #define shift_right_logic_64(a, b)\
413  ((((int64_t)(a)) >> ((int64_t)(b)&0x3f))&0xffffffffffffffff)
414 
415 #define shift_left_logic_08(a, b)\
416  (((a)<<((b)&0x1f))&0xff)
417 #define shift_left_logic_16(a, b)\
418  (((a)<<((b)&0x1f))&0xffff)
419 #define shift_left_logic_32(a, b)\
420  (((a)<<((b)&0x1f))&0xffffffff)
421 #define shift_left_logic_64(a, b)\
422  (((a)<<((b)&0x3f))&0xffffffffffffffff)
423 
424 #endif
void func_getproc_fake(void)
void init_memory_breakpoint(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1373
double int2double(unsigned int m)
int vm_read_mem(vm_mngr_t *vm_mngr, uint64_t addr, char **buffer_ptr, uint64_t size)
Definition: vm_mngr.c:486
int imul_hi_op_32(int a, int b)
Definition: vm_mngr.c:746
void MEM_WRITE_64_PASSTHROUGH(uint64_t addr, uint64_t src)
void dump_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1346
PyObject * addr2obj
Definition: vm_mngr.h:82
int vm_write_mem(vm_mngr_t *vm_mngr, uint64_t addr, char *buffer, uint64_t size)
Definition: vm_mngr.c:518
int64_t double_to_int_64(double d)
Definition: vm_mngr.c:1098
uint64_t shift_left_logic(uint64_t size, uint64_t a, uint64_t b)
Definition: vm_mngr.c:649
double fsin(double a)
Definition: vm_mngr.c:1179
void add_memory_breakpoint(vm_mngr_t *vm_mngr, uint64_t ad, uint64_t size, unsigned int access)
Definition: vm_mngr.c:1543
int imul_hi_op_16(short a, short b)
Definition: vm_mngr.c:739
unsigned int get_memory_page_max_address(void)
unsigned int code_bloc_pool_ad_min
Definition: vm_mngr.h:77
struct memory_page_node * get_memory_page_from_address(vm_mngr_t *, uint64_t ad)
Definition: vm_mngr.c:126
unsigned int _get_memory_page_max_user_address_py(void)
double fsqrt(double a)
Definition: vm_mngr.c:1224
unsigned int MEM_LOOKUP_32_PASSTHROUGH(uint64_t addr)
uint64_t double_to_mem_64(double d)
Definition: vm_mngr.c:1284
void vm_MEM_WRITE_64(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t src)
Definition: vm_mngr.c:454
void _func_loadlib_fake(void)
unsigned char vm_MEM_LOOKUP_08(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:460
void check_write_code_bloc(vm_mngr_t *vm_mngr, uint64_t my_size, uint64_t addr)
Definition: vm_mngr.c:391
void MEM_WRITE_08_PASSTHROUGH(uint64_t addr, unsigned char src)
double fcos(double a)
Definition: vm_mngr.c:1190
double fdiv(double a, double b)
Definition: vm_mngr.c:1144
void func_free(void)
unsigned int load_segment_limit(unsigned int d)
Definition: vm_mngr.c:1681
unsigned int div_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c)
Definition: vm_mngr.c:769
void func_loadlib_fake(void)
LIST_ENTRY(memory_page_node) next
unsigned int fcom_c2(double a, double b)
Definition: vm_mngr.c:1259
double fabs(double a)
Definition: vm_mngr.c:1235
unsigned char MEM_LOOKUP_08_PASSTHROUGH(uint64_t addr)
unsigned int imul_lo_op_08(char a, char b)
Definition: vm_mngr.c:717
unsigned int cpuid(unsigned int a, unsigned int reg_num)
Definition: vm_mngr.c:965
unsigned int umul16_lo(unsigned short a, unsigned short b)
Definition: vm_mngr.c:754
unsigned int get_memory_page_max_user_address(void)
double int_32_to_double(unsigned int m)
Definition: vm_mngr.c:1062
void vm_MEM_WRITE_16(vm_mngr_t *vm_mngr, uint64_t addr, unsigned short src)
Definition: vm_mngr.c:444
double ftan(double a)
Definition: vm_mngr.c:1155
unsigned int access_segment(unsigned int d)
Definition: vm_mngr.c:1668
int imul_hi_op_08(char a, char b)
Definition: vm_mngr.c:732
uint64_t vm_MEM_LOOKUP_64(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:478
unsigned int load_segment_limit_ok(unsigned int d)
Definition: vm_mngr.c:1687
unsigned int umul16_hi(unsigned short a, unsigned short b)
Definition: vm_mngr.c:759
uint64_t get_mem_base_addr(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t *addr_base)
Definition: vm_mngr.c:107
uint64_t access
Definition: vm_mngr.h:99
unsigned int imul_lo_op_16(short a, short b)
Definition: vm_mngr.c:722
void func_free_memory_page(void)
unsigned int vm_MEM_LOOKUP_32(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:472
void func_malloc_memory_page(void)
#define MAX_MEMORY_PAGE_POOL_TAB
Definition: vm_mngr.h:62
void add_memory_page(vm_mngr_t *vm_mngr, struct memory_page_node *mpn_a)
Definition: vm_mngr.c:1467
void _func_alloc(void)
uint64_t rot_left(uint64_t size, uint64_t a, uint64_t b)
Definition: vm_mngr.c:799
unsigned int * code_addr_tab
Definition: vm_mngr.h:76
unsigned short vm_MEM_LOOKUP_16(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:466
unsigned int get_memory_page_max_address_py(void)
PyObject * addr2BlocObj(vm_mngr_t *vm_mngr, uint64_t addr)
Definition: vm_mngr.c:415
unsigned int parity(unsigned int a)
Definition: vm_mngr.c:545
struct memory_page_list_head memory_page_pool
uint64_t shift_right_logic(uint64_t size, uint64_t a, uint64_t b)
Definition: vm_mngr.c:605
int is_mem_mapped(vm_mngr_t *vm_mngr, uint64_t ad)
Definition: vm_mngr.c:87
char * dump(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1493
unsigned int rem_op(unsigned int size, unsigned int a, unsigned int b, unsigned int c)
Definition: vm_mngr.c:783
void MEM_WRITE_32_PASSTHROUGH(uint64_t addr, unsigned int src)
void func_virtualalloc_memory_page(void)
struct code_bloc_node * create_code_bloc_node(uint64_t ad_start, uint64_t ad_stop)
Definition: vm_mngr.c:1320
double fmul(double a, double b)
Definition: vm_mngr.c:1133
void _func_malloc_memory_page(void)
unsigned int fcom_c1(double a, double b)
Definition: vm_mngr.c:1254
unsigned int double_to_mem_32(double d)
Definition: vm_mngr.c:1271
double frndint(double a)
Definition: vm_mngr.c:1166
void vm_MEM_WRITE_32(vm_mngr_t *vm_mngr, uint64_t addr, unsigned int src)
Definition: vm_mngr.c:449
void vm_throw(vm_mngr_t *vm_mngr, unsigned long flags)
double fscale(double a, double b)
Definition: vm_mngr.c:1202
double fsub(double a, double b)
Definition: vm_mngr.c:1122
unsigned int MEM_LOOKUP(vm_mngr_t *vm_mngr, unsigned int my_size, uint64_t addr)
int rcl_cf_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf)
Definition: vm_mngr.c:897
void func_virtualfree_memory_page(void)
tuple c
Definition: ir2C.py:23
void remove_memory_breakpoint(vm_mngr_t *vm_mngr, uint64_t ad, unsigned int access)
Definition: vm_mngr.c:1559
void * ad_hp
Definition: vm_mngr.h:100
void reset_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1396
PyObject * func
Definition: vm_mngr.h:88
int shift_right_arith(unsigned int size, int a, unsigned int b)
Definition: vm_mngr.c:563
void _func_free_memory_page(void)
int sex
Definition: vm_mngr.h:69
unsigned int access_segment_ok(unsigned int d)
Definition: vm_mngr.c:1674
LIST_HEAD(memory_page_list_head, memory_page_node)
int is_mpn_in_tab(vm_mngr_t *vm_mngr, struct memory_page_node *mpn_a)
Definition: vm_mngr.c:1424
void vm_MEM_WRITE_08(vm_mngr_t *vm_mngr, uint64_t addr, unsigned char src)
Definition: vm_mngr.c:438
unsigned int get_memory_page_max_user_address_py(void)
struct code_bloc_list_head code_bloc_pool
void _func_virtualalloc_memory_page(void)
uint64_t ad_code
Definition: vm_mngr.h:109
int rcl_rez_op(unsigned int size, unsigned int a, unsigned int b, unsigned int cf)
Definition: vm_mngr.c:850
unsigned int imul_lo_op_32(int a, int b)
Definition: vm_mngr.c:727
void reset_memory_page_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1379
unsigned int load_tr_segment_selector(unsigned int d)
Definition: vm_mngr.c:1694
uint64_t rot_right(uint64_t size, uint64_t a, uint64_t b)
Definition: vm_mngr.c:824
void dump_memory_breakpoint_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1529
unsigned int fcom_c0(double a, double b)
Definition: vm_mngr.c:1248
double int_64_to_double(uint64_t m)
Definition: vm_mngr.c:1074
uint64_t exception_flags_new
Definition: vm_mngr.h:81
void init_code_bloc_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1366
struct memory_page_node * create_memory_page_node(uint64_t ad, unsigned int size, unsigned int access)
Definition: vm_mngr.c:1295
unsigned int fcom_c3(double a, double b)
Definition: vm_mngr.c:1263
void hexdump(char *m, unsigned int l)
Definition: vm_mngr.c:1626
unsigned int _get_memory_page_from_min_ad_py(unsigned int size)
unsigned int code_bloc_pool_ad_max
Definition: vm_mngr.h:78
uint64_t exception_flags
Definition: vm_mngr.h:80
void _func_virtualfree_memory_page(void)
void _func_free(void)
void _func_getproc_fake(void)
void reset_memory_breakpoint(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1411
unsigned int _get_memory_page_max_address_py(void)
void func_alloc(void)
void MEM_WRITE_16_PASSTHROUGH(uint64_t addr, unsigned short src)
unsigned int mul_hi_op(unsigned int size, unsigned int a, unsigned int b)
Definition: vm_mngr.c:698
uint64_t ad
Definition: vm_mngr.h:97
double mem_32_to_double(unsigned int m)
Definition: vm_mngr.c:1024
unsigned short MEM_LOOKUP_16_PASSTHROUGH(uint64_t addr)
double mem_64_to_double(uint64_t m)
Definition: vm_mngr.c:1039
void add_code_bloc(vm_mngr_t *vm_mngr, struct code_bloc_node *cbp)
Definition: vm_mngr.c:1337
uint64_t ad_stop
Definition: vm_mngr.h:108
uint64_t ad_start
Definition: vm_mngr.h:107
uint64_t MEM_LOOKUP_64_PASSTHROUGH(uint64_t addr)
void init_memory_page_pool(vm_mngr_t *vm_mngr)
Definition: vm_mngr.c:1358
uint64_t size
Definition: vm_mngr.h:98
unsigned int mul_lo_op(unsigned int size, unsigned int a, unsigned int b)
Definition: vm_mngr.c:682
double f2xm1(double a)
Definition: vm_mngr.c:1213
double fadd(double a, double b)
Definition: vm_mngr.c:1111
unsigned int my_imul08(unsigned int a, unsigned int b)
Definition: vm_mngr.c:952
double int_16_to_double(unsigned int m)
Definition: vm_mngr.c:1050
int32_t double_to_int_32(double d)
Definition: vm_mngr.c:1086
unsigned int get_memory_page_from_min_ad_py(unsigned int size)