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, ®ion, &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(); }