00001 00012 #ifndef OPDIS_INSN_BUF_H 00013 #define OPDIS_INSN_BUF_H 00014 00015 #ifdef WIN32 00016 #define LIBCALL _stdcall 00017 #else 00018 #define LIBCALL 00019 #endif 00020 00021 #include <bfd.h> 00022 #include <dis-asm.h> 00023 00024 /* NOTE: These defaults amount to ~4K of space at runtime. Overkill for x86, 00025 * but should be safe for all architectures that libopcodes supports. 00026 */ 00027 00033 #define OPDIS_MAX_ITEMS 64 00034 00040 #define OPDIS_MAX_ITEM_SIZE 64 00041 00047 #define OPDIS_MAX_INSN_STR 128 00048 00049 /* ---------------------------------------------------------------------- */ 00058 typedef struct { 00059 unsigned int item_count; 00060 unsigned int max_item_count; 00061 unsigned int max_item_size; 00062 char **items; 00063 char *string; 00064 unsigned int max_string_size; 00065 /* instruction info from libopcodes disassemble_info struct */ 00066 char insn_info_valid; 00067 char branch_delay_insns; 00068 char data_size; 00069 enum dis_insn_type insn_type; 00070 bfd_vma target; 00071 bfd_vma target2; 00072 } opdis_insn_buffer_t; 00073 00078 typedef opdis_insn_buffer_t * opdis_insn_buf_t; 00079 00080 /* ---------------------------------------------------------------------- */ 00081 #ifdef __cplusplus 00082 extern "C" 00083 { 00084 #endif 00085 00099 opdis_insn_buf_t LIBCALL opdis_insn_buf_alloc( unsigned int max_items, 00100 unsigned int max_item_size, 00101 unsigned int max_insn_str ); 00102 00110 void LIBCALL opdis_insn_buf_free( opdis_insn_buf_t buf ); 00111 00124 int LIBCALL opdis_insn_buf_append( opdis_insn_buf_t buf, const char * item ); 00125 00132 void LIBCALL opdis_insn_buf_clear( opdis_insn_buf_t buf ); 00133 00134 00135 #ifdef __cplusplus 00136 } 00137 #endif 00138 00139 #endif