Example #1
0
void
xed_disas_raw(xed_decode_file_info_t* fi)
{
    printf("In raw...\n");
    void* region = 0;
    unsigned int len = 0;
    xed_map_region(fi->input_file_name, &region, &len);

    xed_disas_info_t di;
    di.s =  (unsigned char*)region;
    di.a = (unsigned char*)region;
    di.q = (unsigned char*)(region) + len; // end of region
    di.dstate = &fi->dstate;
    di.ninst = fi->ninst;
    di.runtime_vaddr = 0;
    di.runtime_vaddr_disas_start = 0;
    di.runtime_vaddr_disas_end = 0;
    di.decode_only = fi->decode_only;
    di.symfn = 0;
    di.caller_symbol_data = 0;
    di.late_init = fi->late_init;
    di.xml_format = fi->xml_format;
    di.input_file_name = fi->input_file_name;
    xed_disas_test(di);
    if (fi->xml_format == 0)
        xed_print_decode_stats();
}
void
xed_disas_hex(xed_disas_info_t* fi)
{
    xed_uint8_t* region = 0;
    unsigned int len = 0;
    unsigned int i = 0;
    xed_uint8_t b = 0;
    FILE* f = 0;

    // read file once to get length
    f = open_file(fi->input_file_name, "r");
    while (read_byte(f,0) != -1)
    {
        len++;
    }
    fclose(f);

    region = (xed_uint8_t*) malloc(len);
    if (region == 0) {
        fprintf(stderr,"ERROR: Could not malloc region for hex file\n");
        exit(1);
    }

    // read file again to read the bytes
    f = open_file(fi->input_file_name, "r");
    while (read_byte(f,&b) != -1)
    {
       assert(i < len);
       region[i++] = b;
    }
    fclose(f);
    assert(i==len);

    fi->s =  (unsigned char*)region;
    fi->a = (unsigned char*)region;
    fi->q = (unsigned char*)(region) + len; // end of region
    fi->runtime_vaddr = 0;
    fi->runtime_vaddr_disas_start = 0;
    fi->runtime_vaddr_disas_end = 0;
    fi->symfn = 0;
    fi->caller_symbol_data = 0;
    fi->line_number_info_fn = 0;
    xed_disas_test(fi);
    if (fi->xml_format == 0)
        xed_print_decode_stats();
}