1 | #include <stdio.h> |
---|---|
2 | #include <stdlib.h> |
3 | #include <string.h> |
4 | |
5 | #include "libdis.h" |
6 | #include "ia32_insn.h" |
7 | #include "ia32_reg.h" /* for ia32_reg wrapper */ |
8 | #include "ia32_settings.h" |
9 | extern ia32_settings_t ia32_settings; |
10 | |
11 | #ifdef _MSC_VER |
12 | #define snprintf _snprintf |
13 | #define inline __inline |
14 | #endif |
15 | |
16 | |
17 | /* =========================================================== INIT/TERM */ |
18 | static DISASM_REPORTER __x86_reporter_func = NULL; |
19 | static void * __x86_reporter_arg = NULL; |
20 | |
21 | int x86_init( enum x86_options options, DISASM_REPORTER reporter, void * arg ) |
22 | { |
23 | ia32_settings.options = options; |
24 | __x86_reporter_func = reporter; |
25 | __x86_reporter_arg = arg; |
26 | |
27 | return 1; |
28 | } |
29 | |
30 | void x86_set_reporter( DISASM_REPORTER reporter, void * arg ) { |
31 | __x86_reporter_func = reporter; |
32 | __x86_reporter_arg = arg; |
33 | } |
34 | |
35 | void x86_set_options( enum x86_options options ){ |
36 | ia32_settings.options = options; |
37 | } |
38 | |
39 | enum x86_options x86_get_options( void ) { |
40 | return ia32_settings.options; |
41 | } |
42 | |
43 | int x86_cleanup( void ) |
44 | { |
45 | return 1; |
46 | } |
47 | |
48 | /* =========================================================== ERRORS */ |
49 | void x86_report_error( enum x86_report_codes code, void *data ) { |
50 | if ( __x86_reporter_func ) { |
51 | (*__x86_reporter_func)(code, data, __x86_reporter_arg); |
52 | } |
53 | } |
54 | |
55 | |
56 | /* =========================================================== MISC */ |
57 | unsigned int x86_endian(void) { return ia32_settings.endian; } |
58 | unsigned int x86_addr_size(void) { return ia32_settings.sz_addr; } |
59 | unsigned int x86_op_size(void) { return ia32_settings.sz_oper; } |
60 | unsigned int x86_word_size(void) { return ia32_settings.sz_word; } |
61 | unsigned int x86_max_insn_size(void) { return ia32_settings.max_insn; } |
62 | unsigned int x86_sp_reg(void) { return ia32_settings.id_sp_reg; } |
63 | unsigned int x86_fp_reg(void) { return ia32_settings.id_fp_reg; } |
64 | unsigned int x86_ip_reg(void) { return ia32_settings.id_ip_reg; } |
65 | unsigned int x86_flag_reg(void) { return ia32_settings.id_flag_reg; } |
66 | |
67 | /* wrapper function to hide the IA32 register fn */ |
68 | void x86_reg_from_id( unsigned int id, x86_reg_t * reg ) { |
69 | ia32_handle_register( reg, id ); |
70 | return; |
71 | } |
72 |