Scroll to navigation

x86_init(3) libdisasm x86_init(3)

NAME

x86_init, x86_cleanup - initialize and cleanup libdisasm

SYNOPSIS

#include <libdis.h>
 
typedef void (*DISASM_REPORTER)( enum x86_report_codes code,
 

void * data , void * arg );
int x86_init( enum x86_options options, DISASM_REPORTER reporter,
 

void * arg );
int x86_cleanup(void);

DESCRIPTION

enum x86_options {
 
opt_none= 0,
 
opt_ignore_nulls=1, /* ignore sequences of > 4 NULL bytes */
 
opt_16_bit=2, /* 16-bit/DOS disassembly */
 
opt_unknown
 
};
enum x86_report_codes {
 

report_disasm_bounds,
 

report_insn_bounds,
 

report_invalid_insn,
 

report_unknown
 
};

EXAMPLES

The following provides a skeleton for initializing and terminating
 
libdisasm:
void reporter( enum x86_report_codes code, void *data, void *arg ) {
 

char * str = NULL;
 

FILE *stream = (FILE *) arg;
 

if (! stream ) stream = stderr;
 
 

/* here would could examine the error and do something useful;
 

* instead we just print that an error occurred */
 

switch ( code ) {
 

case report_disasm_bounds:
 

str = "Attempt to disassemble RVA "
 

"beyond end of buffer";
 

break;
 

case report_insn_bounds:
 

str = "Instruction at RVA extends "
 

"beyond buffer";
 

break;
 

case report_invalid_insn:
 

str = "Invalid opcode at RVA";
 

break;
 

case report_unknown:
 

str = "Unknown Error";
 

break;
 

}
 
 

fprintf(stream, "ERROR ´%s:´ %p0, str, data);
 
}
int main( int argc, char **argv ) {
 

x86_init(opt_none, reporter, stderr);

/* disassembler code goes here */

x86_cleanup();
 
}

SEE ALSO

libdisasm(7), x86_disasm(3), x86_format_insn(3), x86dis(1)
0.21 mammon_