diff options
author | midipix <writeonce@midipix.org> | 2017-12-13 08:55:19 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2017-12-13 11:24:14 -0500 |
commit | 58ced9c919a0fae75e98c937ac55f8e30fc01c6f (patch) | |
tree | e4c0e3aa9dd830dee0e874778d337d2ef44cad48 /src/logic | |
parent | 753060eae1596558287a306bcb7b70343c8a830e (diff) | |
download | perk-58ced9c919a0fae75e98c937ac55f8e30fc01c6f.tar.bz2 perk-58ced9c919a0fae75e98c937ac55f8e30fc01c6f.tar.xz |
refactor: struct pe_image_meta: meta members are now m-prefixed.
Diffstat (limited to 'src/logic')
-rw-r--r-- | src/logic/pe_get_image_meta.c | 156 |
1 files changed, 78 insertions, 78 deletions
diff --git a/src/logic/pe_get_image_meta.c b/src/logic/pe_get_image_meta.c index 412f06e..0bfc393 100644 --- a/src/logic/pe_get_image_meta.c +++ b/src/logic/pe_get_image_meta.c @@ -18,11 +18,11 @@ static int pe_free_image_meta_impl(struct pe_image_meta * meta, int ret) int i; if (meta) { - for (i=0; i<meta->mstats.nimplibs; i++) - free(meta->idata[i].ih_items); + for (i=0; i<meta->m_stats.nimplibs; i++) + free(meta->m_idata[i].ih_items); - free(meta->idata); - free(meta->sectbl); + free(meta->m_idata); + free(meta->m_sectbl); free(meta); } @@ -36,8 +36,8 @@ void pe_free_image_meta(struct pe_image_meta * meta) int pe_get_named_section_index(const struct pe_image_meta * m, const char * name) { - int i; for (i=0; i<m->coff.cfh_num_of_sections; i++) - if (!(strcmp(name,m->sectbl[i].sh_name))) + int i; for (i=0; i<m->m_coff.cfh_num_of_sections; i++) + if (!(strcmp(name,m->m_sectbl[i].sh_name))) return i; return -1; @@ -51,9 +51,9 @@ int pe_get_block_section_index(const struct pe_image_meta * m, const struct pe_b if (m->aobj) return -1; - for (i=0; i<m->coff.cfh_num_of_sections; i++) { - low = m->sectbl[i].sh_virtual_addr; - high = low + m->sectbl[i].sh_virtual_size; + for (i=0; i<m->m_coff.cfh_num_of_sections; i++) { + low = m->m_sectbl[i].sh_virtual_addr; + high = low + m->m_sectbl[i].sh_virtual_size; if ((block->dh_rva >= low) && (block->dh_rva + block->dh_size <= high)) return i; @@ -67,12 +67,12 @@ int pe_get_roffset_from_rva(const struct pe_image_meta * m, uint32_t rva, uint32 int i; uint32_t low,high; - for (i=0; i<m->coff.cfh_num_of_sections; i++) { - low = m->sectbl[i].sh_virtual_addr; - high = low + m->sectbl[i].sh_virtual_size; + for (i=0; i<m->m_coff.cfh_num_of_sections; i++) { + low = m->m_sectbl[i].sh_virtual_addr; + high = low + m->m_sectbl[i].sh_virtual_size; if ((rva >= low) && (rva < high)) { - *roffset = (rva - low) + m->sectbl[i].sh_ptr_to_raw_data; + *roffset = (rva - low) + m->m_sectbl[i].sh_ptr_to_raw_data; return 0; } } @@ -85,12 +85,12 @@ int pe_get_rva_from_roffset(const struct pe_image_meta * m, uint32_t roffset, ui int i; uint32_t low,high,ref; - for (i=0, ref=~0; i<m->coff.cfh_num_of_sections; i++) { - low = m->sectbl[i].sh_ptr_to_raw_data; - high = low + m->sectbl[i].sh_virtual_size; + for (i=0, ref=~0; i<m->m_coff.cfh_num_of_sections; i++) { + low = m->m_sectbl[i].sh_ptr_to_raw_data; + high = low + m->m_sectbl[i].sh_virtual_size; if ((roffset >= low) && (roffset < high)) { - *rva = (roffset - low) + m->sectbl[i].sh_virtual_addr; + *rva = (roffset - low) + m->m_sectbl[i].sh_virtual_addr; return 0; } else if (ref > low) { ref = low; @@ -119,9 +119,9 @@ int pe_get_expsym_by_name( return -1; offset = m->hedata->sh_virtual_addr - m->hedata->sh_ptr_to_raw_data; - symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->edata.eh_name_ptr_rva - offset)); + symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->m_edata.eh_name_ptr_rva - offset)); - for (i=0; i<m->edata.eh_num_of_name_ptrs; i++) { + for (i=0; i<m->m_edata.eh_num_of_name_ptrs; i++) { sym = (const char *)m->image.addr + symrva[i] - offset; if (!(strcmp(sym,name))) { @@ -151,12 +151,12 @@ int pe_get_expsym_by_index( if (m->aobj) return -1; - if (index >= m->edata.eh_num_of_name_ptrs) + if (index >= m->m_edata.eh_num_of_name_ptrs) return -1; if (expsym) { offset = m->hedata->sh_virtual_addr - m->hedata->sh_ptr_to_raw_data; - symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->edata.eh_name_ptr_rva - offset)); + symrva = (uint32_t *)((uintptr_t)m->image.addr + (m->m_edata.eh_name_ptr_rva - offset)); symaddr = (uintptr_t)m->image.addr + symrva[index] - offset; expsym->name = (const char *)symaddr; @@ -188,78 +188,78 @@ int pe_get_image_meta( m->aobj = (struct pe_raw_coff_object_hdr *)base; - if (pe_read_object_header(m->aobj,&m->coff)) { + if (pe_read_object_header(m->aobj,&m->m_coff)) { m->aobj = 0; m->ados = (struct pe_raw_image_dos_hdr *)base; - if ((ret = (pe_read_dos_header(m->ados,&m->dos)))) + if ((ret = (pe_read_dos_header(m->ados,&m->m_dos)))) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,ret)); - m->acoff = (struct pe_raw_coff_image_hdr *)(base + m->dos.dos_lfanew); + m->acoff = (struct pe_raw_coff_image_hdr *)(base + m->m_dos.dos_lfanew); - if ((ret = (pe_read_coff_header(m->acoff,&m->coff)))) + if ((ret = (pe_read_coff_header(m->acoff,&m->m_coff)))) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,ret)); } - mark = (const unsigned char *)base + m->coff.cfh_ptr_to_sym_tbl; - mark += m->coff.cfh_num_of_syms * sizeof(struct pe_raw_coff_symbol); + mark = (const unsigned char *)base + m->m_coff.cfh_ptr_to_sym_tbl; + mark += m->m_coff.cfh_num_of_syms * sizeof(struct pe_raw_coff_symbol); - if (m->coff.cfh_ptr_to_sym_tbl) { - m->coff.cfh_ptr_to_str_tbl = m->coff.cfh_ptr_to_sym_tbl; - m->coff.cfh_ptr_to_str_tbl += m->coff.cfh_num_of_syms * sizeof(struct pe_raw_coff_symbol); - m->coff.cfh_size_of_str_tbl = pe_read_long(mark); + if (m->m_coff.cfh_ptr_to_sym_tbl) { + m->m_coff.cfh_ptr_to_str_tbl = m->m_coff.cfh_ptr_to_sym_tbl; + m->m_coff.cfh_ptr_to_str_tbl += m->m_coff.cfh_num_of_syms * sizeof(struct pe_raw_coff_symbol); + m->m_coff.cfh_size_of_str_tbl = pe_read_long(mark); } if (m->ados) { mark = &m->acoff->cfh_signature[0]; m->aopt = (union pe_raw_opt_hdr *)(mark + sizeof(*m->acoff)); - if ((ret = (pe_read_optional_header(m->aopt,&m->opt)))) + if ((ret = (pe_read_optional_header(m->aopt,&m->m_opt)))) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,ret)); mark = &m->aopt->opt_hdr_32.coh_magic[0]; - m->asectbl = (struct pe_raw_sec_hdr *)(mark + m->coff.cfh_size_of_opt_hdr); + m->asectbl = (struct pe_raw_sec_hdr *)(mark + m->m_coff.cfh_size_of_opt_hdr); } else { mark = &m->aobj->cfh_machine[0]; m->asectbl = (struct pe_raw_sec_hdr *)(mark + sizeof(*m->aobj)); } - if (!(m->sectbl = calloc(m->coff.cfh_num_of_sections,sizeof(*(m->sectbl))))) + if (!(m->m_sectbl = calloc(m->m_coff.cfh_num_of_sections,sizeof(*(m->m_sectbl))))) return pe_free_image_meta_impl( m,PERK_SYSTEM_ERROR(dctx)); - for (i=0; i<m->coff.cfh_num_of_sections; i++) { - pe_read_section_header(&m->asectbl[i],&m->sectbl[i]); + for (i=0; i<m->m_coff.cfh_num_of_sections; i++) { + pe_read_section_header(&m->asectbl[i],&m->m_sectbl[i]); - if (m->sectbl[i].sh_name[0] == '/') - if ((l = strtol(&m->sectbl[i].sh_name[1],0,10)) > 0) - if (l < m->coff.cfh_size_of_str_tbl) - m->sectbl[i].sh_long_name = base + m->coff.cfh_ptr_to_str_tbl + l; + if (m->m_sectbl[i].sh_name[0] == '/') + if ((l = strtol(&m->m_sectbl[i].sh_name[1],0,10)) > 0) + if (l < m->m_coff.cfh_size_of_str_tbl) + m->m_sectbl[i].sh_long_name = base + m->m_coff.cfh_ptr_to_str_tbl + l; } /* .edata */ i = pe_get_named_section_index(m,".edata"); - s = pe_get_block_section_index(m,&m->opt.oh_dirs.coh_export_tbl); + s = pe_get_block_section_index(m,&m->m_opt.oh_dirs.coh_export_tbl); if ((i >= 0) && (i != s)) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,PERK_ERR_IMAGE_MALFORMED)); if (s >= 0) { - m->hedata = &m->sectbl[s]; - m->aedata = (struct pe_raw_export_hdr *)(base + m->sectbl[s].sh_ptr_to_raw_data - + m->opt.oh_dirs.coh_export_tbl.dh_rva - m->sectbl[s].sh_virtual_addr); + m->hedata = &m->m_sectbl[s]; + m->aedata = (struct pe_raw_export_hdr *)(base + m->m_sectbl[s].sh_ptr_to_raw_data + + m->m_opt.oh_dirs.coh_export_tbl.dh_rva - m->m_sectbl[s].sh_virtual_addr); } else if (i >= 0) { - m->hedata = &m->sectbl[i]; - m->aedata = (struct pe_raw_export_hdr *)(base + m->sectbl[i].sh_ptr_to_raw_data); + m->hedata = &m->m_sectbl[i]; + m->aedata = (struct pe_raw_export_hdr *)(base + m->m_sectbl[i].sh_ptr_to_raw_data); } if (m->aedata) { - pe_read_export_header(m->aedata,&m->edata); - m->mstats.nexpsyms = m->edata.eh_num_of_name_ptrs; + pe_read_export_header(m->aedata,&m->m_edata); + m->m_stats.nexpsyms = m->m_edata.eh_num_of_name_ptrs; } /* .idata */ @@ -267,83 +267,83 @@ int pe_get_image_meta( union pe_raw_import_lookup * pitem; i = pe_get_named_section_index(m,".idata"); - s = pe_get_block_section_index(m,&m->opt.oh_dirs.coh_import_tbl); + s = pe_get_block_section_index(m,&m->m_opt.oh_dirs.coh_import_tbl); if ((i >= 0) && (i != s)) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,PERK_ERR_IMAGE_MALFORMED)); if (s >= 0) { - m->hidata = &m->sectbl[s]; - m->aidata = (struct pe_raw_import_hdr *)(base + m->sectbl[s].sh_ptr_to_raw_data - + m->opt.oh_dirs.coh_import_tbl.dh_rva - m->sectbl[s].sh_virtual_addr); + m->hidata = &m->m_sectbl[s]; + m->aidata = (struct pe_raw_import_hdr *)(base + m->m_sectbl[s].sh_ptr_to_raw_data + + m->m_opt.oh_dirs.coh_import_tbl.dh_rva - m->m_sectbl[s].sh_virtual_addr); } else if (i >= 0) { - m->hidata = &m->sectbl[i]; - m->aidata = (struct pe_raw_import_hdr *)(base + m->sectbl[i].sh_ptr_to_raw_data); + m->hidata = &m->m_sectbl[i]; + m->aidata = (struct pe_raw_import_hdr *)(base + m->m_sectbl[i].sh_ptr_to_raw_data); } if (m->aidata) { /* num of implibs */ for (pidata=m->aidata; pe_read_long(pidata->ih_name_rva); pidata++) - m->mstats.nimplibs++; + m->m_stats.nimplibs++; /* import headers */ - if (!(m->idata = calloc(m->mstats.nimplibs,sizeof(*m->idata)))) + if (!(m->m_idata = calloc(m->m_stats.nimplibs,sizeof(*m->m_idata)))) return pe_free_image_meta_impl( m,PERK_SYSTEM_ERROR(dctx)); - for (i=0; i<m->mstats.nimplibs; i++) { - pe_read_import_header(&m->aidata[i],&m->idata[i]); + for (i=0; i<m->m_stats.nimplibs; i++) { + pe_read_import_header(&m->aidata[i],&m->m_idata[i]); - m->idata[i].ih_name = base + m->hidata->sh_ptr_to_raw_data - + m->idata[i].ih_name_rva + m->m_idata[i].ih_name = base + m->hidata->sh_ptr_to_raw_data + + m->m_idata[i].ih_name_rva - m->hidata->sh_virtual_addr; - if (m->idata[i].ih_import_lookup_tbl_rva) - m->idata[i].ih_aitems = (union pe_raw_import_lookup *)(base + m->hidata->sh_ptr_to_raw_data - + m->idata[i].ih_import_lookup_tbl_rva + if (m->m_idata[i].ih_import_lookup_tbl_rva) + m->m_idata[i].ih_aitems = (union pe_raw_import_lookup *)(base + m->hidata->sh_ptr_to_raw_data + + m->m_idata[i].ih_import_lookup_tbl_rva - m->hidata->sh_virtual_addr); /* items */ uint32_t * hint; - m->idata[i].ih_count = 0; + m->m_idata[i].ih_count = 0; - if (m->idata[i].ih_import_lookup_tbl_rva) { - pitem = m->idata[i].ih_aitems; + if (m->m_idata[i].ih_import_lookup_tbl_rva) { + pitem = m->m_idata[i].ih_aitems; hint = (uint32_t *)pitem->ii_hint_name_tbl_rva; for (; *hint; hint=(uint32_t *)((++pitem)->ii_hint_name_tbl_rva)) - m->idata[i].ih_count++; + m->m_idata[i].ih_count++; - if (!(m->idata[i].ih_items = calloc(m->idata[i].ih_count,sizeof(*(m->idata[i].ih_items))))) + if (!(m->m_idata[i].ih_items = calloc(m->m_idata[i].ih_count,sizeof(*(m->m_idata[i].ih_items))))) return pe_free_image_meta_impl( m,PERK_SYSTEM_ERROR(dctx)); } - for (j=0; j<m->idata[i].ih_count; j++) { + for (j=0; j<m->m_idata[i].ih_count; j++) { if ((ret = pe_read_import_lookup( - &(m->idata[i].ih_aitems[j]), - &(m->idata[i].ih_items[j]), - m->opt.oh_std.coh_magic))) + &(m->m_idata[i].ih_aitems[j]), + &(m->m_idata[i].ih_items[j]), + m->m_opt.oh_std.coh_magic))) return pe_free_image_meta_impl( m,PERK_CUSTOM_ERROR(dctx,ret)); - switch (m->opt.oh_std.coh_magic) { + switch (m->m_opt.oh_std.coh_magic) { case PE_MAGIC_PE32: - m->idata[i].ih_items[j].ii_flags = m->idata[i].ih_items[j].u.ii_import_lookup_entry_32; + m->m_idata[i].ih_items[j].ii_flags = m->m_idata[i].ih_items[j].u.ii_import_lookup_entry_32; break; case PE_MAGIC_PE32_PLUS: - m->idata[i].ih_items[j].ii_flags = (m->idata[i].ih_items[j].u.ii_import_lookup_entry_64 >> 32); + m->m_idata[i].ih_items[j].ii_flags = (m->m_idata[i].ih_items[j].u.ii_import_lookup_entry_64 >> 32); break; } - if (!m->idata[i].ih_items[j].ii_flags) { + if (!m->m_idata[i].ih_items[j].ii_flags) { struct pe_raw_hint_name_entry * pentry = (struct pe_raw_hint_name_entry *)(base + m->hidata->sh_ptr_to_raw_data - + m->idata[i].ih_items[j].u.ii_hint_name_tbl_rva - m->hidata->sh_virtual_addr); + + m->m_idata[i].ih_items[j].u.ii_hint_name_tbl_rva - m->hidata->sh_virtual_addr); - m->idata[i].ih_items[j].ii_name = (char *)pentry->ii_name; + m->m_idata[i].ih_items[j].ii_name = (char *)pentry->ii_name; } } } |