Example #1
0
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;
}
Example #2
0
void disassemble_mem(void * src, size_t length) {
	opdis_t o;

	opdis_buf_t buf = opdis_buf_alloc(length, (opdis_vma_t)src);
	opdis_buf_fill(buf, 0, src, length);

	o = opdis_init();

	//opdis_set_arch(o, bfd_arch_k1om, bfd_mach_k1om, NULL);
	//const bfd_arch_info_type *arch_info = bfd_scan_arch("i386:x86-64");
	opdis_set_arch(o, bfd_arch_i386, bfd_mach_x86_64, print_insn_i386_att);

	opdis_disasm_linear(o, buf, (opdis_vma_t)src, length);
	
	opdis_buf_free(buf);

	opdis_term(o);
}