Fixing xex loading into 4k pages.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user