x86_misc.cpp 2.2 KB

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