summaryrefslogtreecommitdiffhomepage
path: root/src/logic
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2025-06-15 06:29:38 +0000
committermidipix <writeonce@midipix.org>2025-06-15 06:29:38 +0000
commit90c2a646551443c4a22beb8e92a701b463c7eba9 (patch)
tree3d306f403dc1869a5a34bec904e590998fa04042 /src/logic
parent18872e9c56cfd4167442c798c01b4d999647b404 (diff)
downloadperk-90c2a646551443c4a22beb8e92a701b463c7eba9.tar.bz2
perk-90c2a646551443c4a22beb8e92a701b463c7eba9.tar.xz
logic: pe_get_expsym_by_name(): refactor, remove accidental LE host assumption.
Diffstat (limited to 'src/logic')
-rw-r--r--src/logic/pe_image_meta_data.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/logic/pe_image_meta_data.c b/src/logic/pe_image_meta_data.c
index db76769..fdbc208 100644
--- a/src/logic/pe_image_meta_data.c
+++ b/src/logic/pe_image_meta_data.c
@@ -149,19 +149,23 @@ static int pe_get_expsym_by_name(
const char * name,
struct pe_expsym * expsym)
{
- uint32_t offset;
- uint32_t * symrva;
- const char * sym;
- unsigned i;
+ uint32_t offset;
+ const unsigned char * ptrtbl;
+ const char * sym;
+ unsigned i;
if (m->r_obj || !m->h_edata)
return -1;
offset = m->h_edata->sh_virtual_addr - m->h_edata->sh_ptr_to_raw_data;
- symrva = (uint32_t *)((uintptr_t)m->r_image.map_addr + (m->m_edata.eh_name_ptr_rva - offset));
+
+ ptrtbl = m->r_image.map_addr;
+ ptrtbl += m->m_edata.eh_name_ptr_rva;
+ ptrtbl -= offset;
for (i=0; i<m->m_edata.eh_num_of_name_ptrs; i++) {
- sym = (const char *)m->r_image.map_addr + symrva[i] - offset;
+ sym = m->r_image.map_addr;
+ sym += pe_read_long(ptrtbl) - offset;
if (!(strcmp(sym,name))) {
if (expsym) {
@@ -173,6 +177,8 @@ static int pe_get_expsym_by_name(
return 0;
}
+
+ ptrtbl += sizeof(uint32_t);
}
return -1;