summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2025-06-15 07:08:14 +0000
committermidipix <writeonce@midipix.org>2025-06-15 07:08:14 +0000
commit74d481336cd06a9d843577764323b64218ecd4b9 (patch)
tree5e00b754410ba1cb88349e0b29b36ef3bcdedb8c
parent90c2a646551443c4a22beb8e92a701b463c7eba9 (diff)
downloadperk-74d481336cd06a9d843577764323b64218ecd4b9.tar.bz2
perk-74d481336cd06a9d843577764323b64218ecd4b9.tar.xz
logic: pe_get_expsym_by_index(): refactor, remove accidental LE host assumption.
-rw-r--r--src/logic/pe_image_meta_data.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/logic/pe_image_meta_data.c b/src/logic/pe_image_meta_data.c
index fdbc208..4effed7 100644
--- a/src/logic/pe_image_meta_data.c
+++ b/src/logic/pe_image_meta_data.c
@@ -197,9 +197,9 @@ static int pe_get_expsym_by_index(
unsigned index,
struct pe_expsym * expsym)
{
- uint32_t offset;
- uint32_t * symrva;
- uintptr_t symaddr;
+ uint32_t offset;
+ const unsigned char * symptr;
+ const char * sym;
if (m->r_obj)
return -1;
@@ -208,11 +208,16 @@ static int pe_get_expsym_by_index(
return -1;
if (expsym) {
- 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));
- symaddr = (uintptr_t)m->r_image.map_addr + symrva[index] - offset;
+ offset = m->h_edata->sh_virtual_addr - m->h_edata->sh_ptr_to_raw_data;
+
+ symptr = m->r_image.map_addr;
+ symptr += m->m_edata.eh_name_ptr_rva - offset;
+ symptr += index * sizeof(uint32_t);
+
+ sym = m->r_image.map_addr;
+ sym += pe_read_long(symptr) - offset;
- expsym->s_name = (const char *)symaddr;
+ expsym->s_name = sym;
expsym->s_eaddr = 0;
expsym->s_maddr = 0;
expsym->s_roffset = 0;