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