Fixing xex loading into 4k pages.

This commit is contained in:
Ben Vanik
2014-09-13 19:32:37 -07:00
parent 0ad3ed0230
commit 447b5bf316
6 changed files with 25 additions and 25 deletions

View File

@@ -233,13 +233,12 @@ void XUserModule::Dump() {
type = "RODATA ";
break;
}
const size_t start_address =
header->exe_address + (i * xe_xex2_section_length);
const size_t start_address = header->exe_address + (i * section->page_size);
const size_t end_address =
start_address + (section->info.page_count * xe_xex2_section_length);
start_address + (section->info.page_count * section->page_size);
printf(" %3d %s %3d pages %.8X - %.8X (%d bytes)\n", (int)n, type,
section->info.page_count, (int)start_address, (int)end_address,
section->info.page_count * xe_xex2_section_length);
section->info.page_count * section->page_size);
i += section->info.page_count;
}
printf("\n");
@@ -292,7 +291,7 @@ void XUserModule::Dump() {
unimpl_count++;
}
}
printf(" Total: %4zu\n", import_info_count);
printf(" Total: %4u\n", uint32_t(import_info_count));
printf(" Known: %3d%% (%d known, %d unknown)\n",
(int)(known_count / (float)import_info_count * 100.0f),
known_count, unknown_count);

View File

@@ -399,6 +399,8 @@ int xe_xex2_read_header(const uint8_t *addr, const size_t length,
XEEXPECTNOTNULL(header->sections);
for (size_t n = 0; n < header->section_count; n++) {
xe_xex2_section_t *section = &header->sections[n];
section->page_size =
header->exe_address <= 0x90000000 ? 64 * 1024 : 4 * 1024;
section->info.value = poly::load_and_swap<uint32_t>(ps);
ps += 4;
memcpy(section->digest, ps, sizeof(section->digest));

View File

@@ -410,18 +410,17 @@ typedef enum {
} xe_xex2_section_type;
typedef struct {
size_t page_size;
union {
struct {
xe_xex2_section_type type : 4;
uint32_t page_count : 28; // # of 64kb pages
uint32_t page_count : 28; // # of pages
};
uint32_t value; // To make uint8_t swapping easier
} info;
uint8_t digest[20];
} xe_xex2_section_t;
#define xe_xex2_section_length 0x00010000
typedef struct {
uint32_t xex2;
xe_xex2_module_flags module_flags;