diff options
author | midipix <writeonce@midipix.org> | 2025-06-15 06:29:38 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-06-15 06:29:38 +0000 |
commit | 90c2a646551443c4a22beb8e92a701b463c7eba9 (patch) | |
tree | 3d306f403dc1869a5a34bec904e590998fa04042 | |
parent | 18872e9c56cfd4167442c798c01b4d999647b404 (diff) | |
download | perk-90c2a646551443c4a22beb8e92a701b463c7eba9.tar.bz2 perk-90c2a646551443c4a22beb8e92a701b463c7eba9.tar.xz |
logic: pe_get_expsym_by_name(): refactor, remove accidental LE host assumption.
-rw-r--r-- | src/logic/pe_image_meta_data.c | 18 |
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; |