diff options
author | midipix <writeonce@midipix.org> | 2025-06-07 13:39:58 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-06-07 15:20:04 +0000 |
commit | e5823e2b6269c82dc348bece70a40b1d96520c25 (patch) | |
tree | 455defe58af2c46972b7e98bcb067c8ba13c12aa | |
parent | 425c2f0202cdd52a2d51a91dc178a28cb9f00b1b (diff) | |
download | perk-e5823e2b6269c82dc348bece70a40b1d96520c25.tar.bz2 perk-e5823e2b6269c82dc348bece70a40b1d96520c25.tar.xz |
struct pe_meta_coff_symbol: optimize for iterative name access.
-rw-r--r-- | include/perk/perk_meta.h | 4 | ||||
-rw-r--r-- | src/output/pe_output_image_symbols.c | 8 | ||||
-rw-r--r-- | src/reader/pe_read_coff_symbol.c | 10 |
3 files changed, 8 insertions, 14 deletions
diff --git a/include/perk/perk_meta.h b/include/perk/perk_meta.h index eeed089..a798426 100644 --- a/include/perk/perk_meta.h +++ b/include/perk/perk_meta.h @@ -252,13 +252,13 @@ struct pe_meta_import_lookup { /* coff: symbol table entry */ struct pe_meta_coff_symbol { - char cs_name[24]; - char * cs_long_name; + char * cs_name; uint32_t cs_value; int16_t cs_section_number; uint16_t cs_type; unsigned char cs_storage_class; unsigned char cs_num_of_aux_symbols; + char cs_name_buf[24]; }; diff --git a/src/output/pe_output_image_symbols.c b/src/output/pe_output_image_symbols.c index 73e712c..8305b1c 100644 --- a/src/output/pe_output_image_symbols.c +++ b/src/output/pe_output_image_symbols.c @@ -43,13 +43,7 @@ int pe_output_image_symbols( &symtbl[i],&symrec, &meta->m_coff,meta->r_image.map_addr); - if (pe_dprintf( - fdout, - "%s%s\n", - dash, - symrec.cs_long_name - ? symrec.cs_long_name - : symrec.cs_name) < 0) + if (pe_dprintf(fdout,"%s%s\n",dash,symrec.cs_name) < 0) return PERK_FILE_ERROR(dctx); i += symtbl[i].cs_num_of_aux_symbols[0]; diff --git a/src/reader/pe_read_coff_symbol.c b/src/reader/pe_read_coff_symbol.c index ef72e59..965e2c5 100644 --- a/src/reader/pe_read_coff_symbol.c +++ b/src/reader/pe_read_coff_symbol.c @@ -22,14 +22,14 @@ int pe_read_coff_symbol( char * mark; unsigned bias = 0; - m->cs_long_name = 0; + m->cs_name = m->cs_name_buf; m->cs_value = pe_read_long(p->cs_value); m->cs_section_number = pe_read_short(p->cs_section_number); m->cs_type = pe_read_short(p->cs_type); m->cs_storage_class = p->cs_storage_class[0]; m->cs_num_of_aux_symbols = p->cs_num_of_aux_symbols[0]; - memset(m->cs_name,0,sizeof(m->cs_name)); + memset(m->cs_name_buf,0,sizeof(m->cs_name_buf)); if (p->cs_storage_class[0] == PE_IMAGE_SYM_CLASS_FILE) if (p->cs_num_of_aux_symbols[0]) @@ -40,17 +40,17 @@ int pe_read_coff_symbol( if (!bias && (p->cs_storage_class[0] == PE_IMAGE_SYM_CLASS_FILE) && p->cs_num_of_aux_symbols[0]) { - memcpy(m->cs_name,p[1].cs_name,sizeof(*p)); + memcpy(m->cs_name_buf,p[1].cs_name,sizeof(*p)); } else if (p->cs_name[0]) { - memcpy(m->cs_name,p->cs_name,sizeof(p->cs_name)); + memcpy(m->cs_name_buf,p->cs_name,sizeof(p->cs_name)); } else if (!p->cs_name[1] && !p->cs_name[2] && !p->cs_name[3]) { mark = (char *)base; roffset = pe_read_long(&p->cs_name[4]); if (roffset < coff->cfh_size_of_str_tbl) - m->cs_long_name = mark + coff->cfh_ptr_to_str_tbl + roffset; + m->cs_name = mark + coff->cfh_ptr_to_str_tbl + roffset; } return 0; |