From 82a0a1649830c8faad13dffcb4c5450f70af50d9 Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 31 Oct 2015 12:23:37 -0400 Subject: account for import directory entries with no referenced symbols. --- src/main/pe_get_image_meta.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/pe_get_image_meta.c b/src/main/pe_get_image_meta.c index 47ea8fd..350abe3 100644 --- a/src/main/pe_get_image_meta.c +++ b/src/main/pe_get_image_meta.c @@ -137,8 +137,9 @@ int pe_get_image_meta (const struct pe_raw_image * image, struct pe_image_meta * m->idata[i].name = base + m->hidata->ptr_to_raw_data + m->idata[i].name_rva - m->hidata->virtual_addr; - m->idata[i].aitems = (struct pe_import_lookup_item *)(base + m->hidata->ptr_to_raw_data - + m->idata[i].import_lookup_tbl_rva - m->hidata->virtual_addr); + if (m->idata[i].import_lookup_tbl_rva) + m->idata[i].aitems = (struct pe_import_lookup_item *)(base + m->hidata->ptr_to_raw_data + + m->idata[i].import_lookup_tbl_rva - m->hidata->virtual_addr); #ifdef PERK_DEVEL printf("%s\n",m->idata[i].name); @@ -146,11 +147,13 @@ int pe_get_image_meta (const struct pe_raw_image * image, struct pe_image_meta * /* items */ m->idata[i].count = 0; - for (pitem=m->idata[i].aitems; *(uint32_t *)pitem->u.hint_name_tbl_rva; pitem++) - m->idata[i].count++; + if (m->idata[i].import_lookup_tbl_rva) { + for (pitem=m->idata[i].aitems; *(uint32_t *)pitem->u.hint_name_tbl_rva; pitem++) + m->idata[i].count++; - if (!(m->idata[i].items = calloc(m->idata[i].count,sizeof(*(m->idata[i].items))))) - return pe_free_image_meta_impl(m,status); + if (!(m->idata[i].items = calloc(m->idata[i].count,sizeof(*(m->idata[i].items))))) + return pe_free_image_meta_impl(m,status); + } for (j=0; jidata[i].count; j++) { if ((status = pe_read_import_lookup_item( -- cgit v1.2.3