diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/logic/pe_get_image_meta.c | 43 | ||||
-rw-r--r-- | src/output/pe_output_image_type.c | 2 |
2 files changed, 31 insertions, 14 deletions
diff --git a/src/logic/pe_get_image_meta.c b/src/logic/pe_get_image_meta.c index b4b21d3..ee2b632 100644 --- a/src/logic/pe_get_image_meta.c +++ b/src/logic/pe_get_image_meta.c @@ -59,9 +59,10 @@ int pe_get_block_section_index(const struct pe_image_meta * m, const struct pe_b return -1; } -const char * pe_get_expsym_by_name( +int pe_get_expsym_by_name( const struct pe_image_meta * m, - const char * name) + const char * name, + struct pe_expsym * expsym) { uint32_t offset; uint32_t * symrva; @@ -74,29 +75,45 @@ const char * pe_get_expsym_by_name( for (i=0; i<m->edata.num_of_name_ptrs; i++) { sym = (const char *)m->image.addr + symrva[i] - offset; - if (!(strcmp(sym,name))) - return sym; + if (!(strcmp(sym,name))) { + if (expsym) { + expsym->name = sym; + expsym->eaddr = 0; + expsym->maddr = 0; + expsym->roffset = 0; + } + + return 0; + } } - return 0; + return -1; } -const char * pe_get_expsym_by_index( +int pe_get_expsym_by_index( const struct pe_image_meta * m, - unsigned index) + unsigned index, + struct pe_expsym * expsym) { uint32_t offset; uint32_t * symrva; - uintptr_t addr; + uintptr_t symaddr; if (index >= m->edata.num_of_name_ptrs) - return 0; + return -1; + + if (expsym) { + offset = m->hedata->virtual_addr - m->hedata->ptr_to_raw_data; + symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->edata.name_ptr_rva - offset)); + symaddr = (uintptr_t)m->image.addr + symrva[index] - offset; - offset = m->hedata->virtual_addr - m->hedata->ptr_to_raw_data; - symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->edata.name_ptr_rva - offset)); - addr = (uintptr_t)m->image.addr + symrva[index] - offset; + expsym->name = (const char *)symaddr; + expsym->eaddr = 0; + expsym->maddr = 0; + expsym->roffset = 0; + } - return (const char *)addr; + return 0; } int pe_get_image_meta( diff --git a/src/output/pe_output_image_type.c b/src/output/pe_output_image_type.c index b2a0bd7..21ae925 100644 --- a/src/output/pe_output_image_type.c +++ b/src/output/pe_output_image_type.c @@ -66,7 +66,7 @@ static const char * pretty_subsystem(const struct pe_unit_ctx * uctx) static bool pe_image_is_psxscl(const struct pe_unit_ctx * uctx) { return (!uctx->meta->summary.nimplibs - && pe_get_expsym_by_name(uctx->meta,"__psx_init")); + && !pe_get_expsym_by_name(uctx->meta,"__psx_init",0)); } static const char * pretty_framework(const struct pe_unit_ctx * uctx) |