static int disassemble_file( const char * name, opdis_off_t offset ) { int rv; FILE * f; opdis_t o; opdis_buf_t buf; opdis_insn_tree_t tree; f = fopen( name, "r" ); if (! f ) { printf( "Unable to open file %s: %s\n", name, strerror(errno) ); return -1; } buf = opdis_buf_read( f, 0, 0 ); fclose( f ); o = opdis_init(); tree = opdis_insn_tree_init( 1 ); opdis_set_display( o, store_insn, tree ); rv = opdis_disasm_cflow( o, buf, (opdis_vma_t) offset ); opdis_insn_tree_foreach( tree, print_insn, (void *) name ); opdis_insn_tree_free( tree ); opdis_term( o ); return (rv > 0) ? 0 : -2; }
static void set_defaults( struct opdis_options * opts ) { opts->jobs = job_list_alloc(); opts->map = mem_map_alloc(); opts->targets = tgt_list_alloc(); opts->opdis = opdis_init(); opts->insn_tree = opdis_insn_tree_init( 1 ); opts->output_file = stdout; // TODO get first available arch // TODO: use 64-bit detection? opts->arch_str = "i386"; opts->arch = bfd_mach_i386_i386; opts->syntax_str = "att"; opts->syntax = opdis_x86_syntax_att; opts->fmt_str = "dump"; opts->fmt = asmfmt_dump; opts->disasm_opts = ""; }