x86_init(3) initialize and cleanup libdisasm

Other Alias

x86_cleanup

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:' %p, str, data);
}

int main( int argc, char **argv ) {

        x86_init(opt_none, reporter, stderr);


        /* disassembler code goes here */


        x86_cleanup();
}