diff options
Diffstat (limited to 'src')
40 files changed, 225 insertions, 77 deletions
diff --git a/src/crc/pe_crc32.c b/src/crc/pe_crc32.c new file mode 100644 index 0000000..68c28dd --- /dev/null +++ b/src/crc/pe_crc32.c @@ -0,0 +1,29 @@ +/***************************************************************/ +/* perk: PE Resource Kit */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ +/* Released under GPLv2 and GPLv3; see COPYING.PERK. */ +/***************************************************************/ + +#include <stdint.h> +#include <unistd.h> + +#include <perk/perk.h> +#include <perk/perk_crc32.h> + +static const uint32_t crc32_table[256] = PERK_CRC32_TABLE; + +uint32_t pe_hash_mbstr_crc32(const unsigned char * str) +{ + const unsigned char * ch; + uint32_t crc32; + + crc32 = 0 ^ 0xFFFFFFFF; + ch = str; + + while (*ch) { + crc32 = (crc32 >> 8) ^ crc32_table[(crc32 ^ *ch) & 0xFF]; + ch++; + } + + return (crc32 ^ 0xFFFFFFFF); +} diff --git a/src/crc/pe_crc64.c b/src/crc/pe_crc64.c new file mode 100644 index 0000000..3cd6e06 --- /dev/null +++ b/src/crc/pe_crc64.c @@ -0,0 +1,29 @@ +/***************************************************************/ +/* perk: PE Resource Kit */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ +/* Released under GPLv2 and GPLv3; see COPYING.PERK. */ +/***************************************************************/ + +#include <stdint.h> +#include <unistd.h> + +#include <perk/perk.h> +#include <perk/perk_crc64.h> + +static const uint64_t crc64_table[256] = PERK_CRC64_TABLE; + +uint64_t pe_hash_mbstr_crc64(const unsigned char * str) +{ + const unsigned char * ch; + uint64_t crc64; + + crc64 = 0 ^ 0xFFFFFFFFFFFFFFFF; + ch = str; + + while (*ch) { + crc64 = (crc64 >> 8) ^ crc64_table[(crc64 ^ *ch) & 0xFF]; + ch++; + } + + return (crc64 ^ 0xFFFFFFFFFFFFFFFF); +} diff --git a/src/driver/pe_amain.c b/src/driver/pe_amain.c index a766dba..547714a 100644 --- a/src/driver/pe_amain.c +++ b/src/driver/pe_amain.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/driver/pe_driver_ctx.c b/src/driver/pe_driver_ctx.c index 11c2e27..5e2f8ee 100644 --- a/src/driver/pe_driver_ctx.c +++ b/src/driver/pe_driver_ctx.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/driver/pe_unit_ctx.c b/src/driver/pe_unit_ctx.c index b165226..88bb71f 100644 --- a/src/driver/pe_unit_ctx.c +++ b/src/driver/pe_unit_ctx.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_coff_image_hdr.c b/src/hexdump/pe_hexdump_coff_image_hdr.c index 606ae38..33c01bc 100644 --- a/src/hexdump/pe_hexdump_coff_image_hdr.c +++ b/src/hexdump/pe_hexdump_coff_image_hdr.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_coff_object_hdr.c b/src/hexdump/pe_hexdump_coff_object_hdr.c index fa7fea3..0ff1bbe 100644 --- a/src/hexdump/pe_hexdump_coff_object_hdr.c +++ b/src/hexdump/pe_hexdump_coff_object_hdr.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_coff_opt_hdr.c b/src/hexdump/pe_hexdump_coff_opt_hdr.c index e6a1e5f..82455ef 100644 --- a/src/hexdump/pe_hexdump_coff_opt_hdr.c +++ b/src/hexdump/pe_hexdump_coff_opt_hdr.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_export_hdr.c b/src/hexdump/pe_hexdump_export_hdr.c index d1e3a33..373d78e 100644 --- a/src/hexdump/pe_hexdump_export_hdr.c +++ b/src/hexdump/pe_hexdump_export_hdr.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_image_dos_hdr.c b/src/hexdump/pe_hexdump_image_dos_hdr.c index 9579279..ecae452 100644 --- a/src/hexdump/pe_hexdump_image_dos_hdr.c +++ b/src/hexdump/pe_hexdump_image_dos_hdr.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_import_tbl.c b/src/hexdump/pe_hexdump_import_tbl.c index 41c7fe9..49e6040 100644 --- a/src/hexdump/pe_hexdump_import_tbl.c +++ b/src/hexdump/pe_hexdump_import_tbl.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/hexdump/pe_hexdump_sec_tbl.c b/src/hexdump/pe_hexdump_sec_tbl.c index a9c74b0..c91d585 100644 --- a/src/hexdump/pe_hexdump_sec_tbl.c +++ b/src/hexdump/pe_hexdump_sec_tbl.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/info/pe_info_get_image_abi.c b/src/info/pe_info_get_image_abi.c index faf141b..0b1488b 100644 --- a/src/info/pe_info_get_image_abi.c +++ b/src/info/pe_info_get_image_abi.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/info/pe_info_get_image_framework.c b/src/info/pe_info_get_image_framework.c index b56ae38..face7de 100644 --- a/src/info/pe_info_get_image_framework.c +++ b/src/info/pe_info_get_image_framework.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/info/pe_info_get_image_subsystem.c b/src/info/pe_info_get_image_subsystem.c index dfe1b80..7d943ad 100644 --- a/src/info/pe_info_get_image_subsystem.c +++ b/src/info/pe_info_get_image_subsystem.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/info/pe_info_get_image_subtype.c b/src/info/pe_info_get_image_subtype.c index 4a2b1da..9206930 100644 --- a/src/info/pe_info_get_image_subtype.c +++ b/src/info/pe_info_get_image_subtype.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_endian_impl.h b/src/internal/perk_endian_impl.h index 347e229..0577a00 100644 --- a/src/internal/perk_endian_impl.h +++ b/src/internal/perk_endian_impl.h @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_errinfo_impl.c b/src/internal/perk_errinfo_impl.c index d930c1a..c055f62 100644 --- a/src/internal/perk_errinfo_impl.c +++ b/src/internal/perk_errinfo_impl.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_errinfo_impl.h b/src/internal/perk_errinfo_impl.h index 5d195d4..95d917c 100644 --- a/src/internal/perk_errinfo_impl.h +++ b/src/internal/perk_errinfo_impl.h @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_hexdump_impl.c b/src/internal/perk_hexdump_impl.c index 01effe0..ee0d097 100644 --- a/src/internal/perk_hexdump_impl.c +++ b/src/internal/perk_hexdump_impl.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_hexdump_impl.h b/src/internal/perk_hexdump_impl.h index 379d427..bfe24ec 100644 --- a/src/internal/perk_hexdump_impl.h +++ b/src/internal/perk_hexdump_impl.h @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/internal/perk_reader_impl.h b/src/internal/perk_reader_impl.h index 9074716..41ba60c 100644 --- a/src/internal/perk_reader_impl.h +++ b/src/internal/perk_reader_impl.h @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/logic/pe_image_meta_data.c b/src/logic/pe_image_meta_data.c index 9753487..9846818 100644 --- a/src/logic/pe_image_meta_data.c +++ b/src/logic/pe_image_meta_data.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ @@ -26,7 +26,11 @@ static int pe_free_image_meta_impl(struct pe_image_meta * meta, int ret) for (i=0; i<meta->m_stats.t_nimplibs; i++) free(meta->m_idata[i].ih_items); + free(meta->m_symvec_crc32); + free(meta->m_symvec_crc64); + free(meta->m_idata); + free(meta->m_symtbl); free(meta->m_sectbl); free(meta); } @@ -39,6 +43,24 @@ void pe_meta_free_image_meta(struct pe_image_meta * meta) pe_free_image_meta_impl(meta,0); } +static int pe_symrec_crc32_compare(const void * a, const void * b) +{ + struct pe_meta_coff_symbol * syma = *(struct pe_meta_coff_symbol **)a; + struct pe_meta_coff_symbol * symb = *(struct pe_meta_coff_symbol **)b; + int eqor = !!(syma->cs_crc32 - symb->cs_crc32); + + return eqor * (syma->cs_crc32 > symb->cs_crc32 ? (1) : (-1)); +} + +static int pe_symrec_crc64_compare(const void * a, const void * b) +{ + struct pe_meta_coff_symbol * syma = *(struct pe_meta_coff_symbol **)a; + struct pe_meta_coff_symbol * symb = *(struct pe_meta_coff_symbol **)b; + int eqor = !!(syma->cs_crc64 - symb->cs_crc64); + + return eqor * (syma->cs_crc64 > symb->cs_crc64 ? (1) : (-1)); +} + static int pe_get_named_section_index(const struct pe_image_meta * m, const char * name) { int i; for (i=0; i<m->m_coff.cfh_num_of_sections; i++) @@ -330,18 +352,24 @@ static void pe_detect_image_framework(struct pe_image_meta * m) } int pe_meta_get_image_meta( - const struct pe_driver_ctx * dctx, - const struct pe_raw_image * image, - struct pe_image_meta ** meta) + const struct pe_driver_ctx * dctx, + const struct pe_raw_image * image, + struct pe_image_meta ** meta) { - int ret; - int i,s; - long l; - unsigned j; - const unsigned char * mark; - struct pe_image_meta * m; - char * base; - uint64_t vaddr; + int ret; + int i,s; + long l; + unsigned j; + + void * addr; + char * base; + const unsigned char * mark; + uint64_t vaddr; + + struct pe_image_meta * m; + struct pe_meta_coff_symbol * symrec; + int nrecs; + int nsyms; base = image->map_addr; @@ -365,13 +393,59 @@ int pe_meta_get_image_meta( m,PERK_CUSTOM_ERROR(dctx,ret)); } - 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->m_coff.cfh_ptr_to_sym_tbl) { + mark = (const unsigned char *)base+ + m->m_coff.cfh_ptr_to_sym_tbl; + m->r_symtbl = (struct pe_raw_coff_symbol *)mark; + mark += m->m_coff.cfh_size_of_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_ptr_to_str_tbl += m->m_coff.cfh_size_of_sym_tbl; m->m_coff.cfh_size_of_str_tbl = pe_read_long(mark); + + } + + if ((nrecs = m->m_coff.cfh_size_of_sym_tbl/sizeof(struct pe_raw_coff_symbol))) + if (!(m->m_symtbl = calloc(nrecs+1,sizeof(struct pe_meta_coff_symbol)))) + return PERK_SYSTEM_ERROR(dctx); + + for (i=0,symrec=m->m_symtbl; i<nrecs; i++,symrec++) { + pe_read_coff_symbol( + &m->r_symtbl[i],symrec, + &m->m_coff,base); + + addr = symrec->cs_name; + mark = addr; + + symrec->cs_crc32 = pe_hash_mbstr_crc32(mark); + symrec->cs_crc64 = pe_hash_mbstr_crc64(mark); + + i += m->r_symtbl[i].cs_num_of_aux_recs[0]; + } + + m->m_stats.t_nsymbols = symrec - m->m_symtbl; + + if ((nsyms = m->m_stats.t_nsymbols) && true) { + if (!(m->m_symvec_crc32 = calloc(nsyms,sizeof(*m->m_symvec_crc32)))) + return PERK_SYSTEM_ERROR(dctx); + + for (i=0; i<nsyms; i++) + m->m_symvec_crc32[i] = &m->m_symtbl[i]; + + qsort(&m->m_symvec_crc32[0],nsyms, + sizeof(*m->m_symvec_crc32), + pe_symrec_crc32_compare); + } + + if (nsyms && true) { + if (!(m->m_symvec_crc64 = calloc(nsyms,sizeof(*m->m_symvec_crc64)))) + return PERK_SYSTEM_ERROR(dctx); + + for (i=0; i<nsyms; i++) + m->m_symvec_crc64[i] = &m->m_symtbl[i]; + + qsort(m->m_symvec_crc64,nsyms, + sizeof(*m->m_symvec_crc64), + pe_symrec_crc64_compare); } if (m->r_dos) { diff --git a/src/logic/pe_image_raw_data.c b/src/logic/pe_image_raw_data.c index 7ab6da6..c6b3cb3 100644 --- a/src/logic/pe_image_raw_data.c +++ b/src/logic/pe_image_raw_data.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_error.c b/src/output/pe_output_error.c index 50c7357..887fb7a 100644 --- a/src/output/pe_output_error.c +++ b/src/output/pe_output_error.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_export_symbols.c b/src/output/pe_output_export_symbols.c index c648d44..afa6a92 100644 --- a/src/output/pe_output_export_symbols.c +++ b/src/output/pe_output_export_symbols.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_idata_libraries.c b/src/output/pe_output_idata_libraries.c index 59da138..d9e1645 100644 --- a/src/output/pe_output_idata_libraries.c +++ b/src/output/pe_output_idata_libraries.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_image_category.c b/src/output/pe_output_image_category.c index b3d72df..bd80687 100644 --- a/src/output/pe_output_image_category.c +++ b/src/output/pe_output_image_category.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_image_sections.c b/src/output/pe_output_image_sections.c index 472ce4b..69b49d5 100644 --- a/src/output/pe_output_image_sections.c +++ b/src/output/pe_output_image_sections.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_image_strings.c b/src/output/pe_output_image_strings.c index 8ba22fe..a0ca849 100644 --- a/src/output/pe_output_image_strings.c +++ b/src/output/pe_output_image_strings.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/output/pe_output_image_symbols.c b/src/output/pe_output_image_symbols.c index 6c8f4dc..26269ac 100644 --- a/src/output/pe_output_image_symbols.c +++ b/src/output/pe_output_image_symbols.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ @@ -15,38 +15,50 @@ #include "perk_dprintf_impl.h" #include "perk_errinfo_impl.h" -int pe_output_image_symbols( +static int pe_output_symbol_names( const struct pe_driver_ctx * dctx, - const struct pe_image_meta * meta) + const struct pe_image_meta * meta, + int fdout) { - unsigned i; - int fdout; - char * mark; - struct pe_raw_coff_symbol * symtbl; - struct pe_meta_coff_symbol symrec; - const char * dash = ""; - - fdout = pe_driver_fdout(dctx); + struct pe_meta_coff_symbol * symrec; - if (dctx->cctx->fmtflags & PERK_PRETTY_YAML) { - if (pe_dprintf(fdout,"symbols:\n") < 0) + for (symrec=meta->m_symtbl; symrec->cs_name; symrec++) + if (pe_dprintf(fdout,"%s\n",symrec->cs_name) < 0) return PERK_FILE_ERROR(dctx); - dash = "- "; - } + return 0; +} - mark = (char *)meta->r_image.map_addr; - symtbl = (struct pe_raw_coff_symbol *)(mark + meta->m_coff.cfh_ptr_to_sym_tbl); +static int pe_output_symbol_names_yaml( + const struct pe_driver_ctx * dctx, + const struct pe_image_meta * meta, + int fdout) +{ + struct pe_meta_coff_symbol * symrec; - for (i=0; i<meta->m_coff.cfh_num_of_syms; i++) { - pe_read_coff_symbol( - &symtbl[i],&symrec, - &meta->m_coff,meta->r_image.map_addr); + if (pe_dprintf(fdout," - Symbols:\n") < 0) + return PERK_FILE_ERROR(dctx); - if (pe_dprintf(fdout,"%s%s\n",dash,symrec.cs_name) < 0) + for (symrec=meta->m_symtbl; symrec->cs_name; symrec++) + if (pe_dprintf(fdout," - [ symbol: %s ]\n",symrec->cs_name) < 0) return PERK_FILE_ERROR(dctx); - i += symtbl[i].cs_num_of_aux_recs[0]; + return 0; +} + +int pe_output_image_symbols( + const struct pe_driver_ctx * dctx, + const struct pe_image_meta * meta) +{ + int fdout = pe_driver_fdout(dctx); + + if (dctx->cctx->fmtflags & PERK_PRETTY_YAML) { + if (pe_output_symbol_names_yaml(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); + + } else { + if (pe_output_symbol_names(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); } return 0; diff --git a/src/output/pe_output_mdso_libraries.c b/src/output/pe_output_mdso_libraries.c index 049cd4e..f9d61cf 100644 --- a/src/output/pe_output_mdso_libraries.c +++ b/src/output/pe_output_mdso_libraries.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_coff_header.c b/src/reader/pe_read_coff_header.c index 9894017..0051e46 100644 --- a/src/reader/pe_read_coff_header.c +++ b/src/reader/pe_read_coff_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ @@ -28,7 +28,9 @@ int pe_read_coff_header(const struct pe_raw_coff_image_hdr * p, struct pe_meta_c m->cfh_time_date_stamp = pe_read_long(p->cfh_time_date_stamp); m->cfh_ptr_to_sym_tbl = pe_read_long(p->cfh_ptr_to_sym_tbl); - m->cfh_num_of_syms = pe_read_long(p->cfh_num_of_sym_recs); + + m->cfh_size_of_sym_tbl = pe_read_long(p->cfh_num_of_sym_recs); + m->cfh_size_of_sym_tbl *= sizeof(struct pe_raw_coff_symbol); m->cfh_size_of_opt_hdr = pe_read_short(p->cfh_size_of_opt_hdr); m->cfh_characteristics = pe_read_short(p->cfh_characteristics); @@ -99,7 +101,9 @@ int pe_read_object_header(const struct pe_raw_coff_object_hdr * p, struct pe_met m->cfh_time_date_stamp = pe_read_long(p->cfh_time_date_stamp); m->cfh_ptr_to_sym_tbl = pe_read_long(p->cfh_ptr_to_sym_tbl); - m->cfh_num_of_syms = pe_read_long(p->cfh_num_of_sym_recs); + + m->cfh_size_of_sym_tbl = pe_read_long(p->cfh_num_of_sym_recs); + m->cfh_size_of_sym_tbl *= sizeof(struct pe_raw_coff_symbol); m->cfh_size_of_opt_hdr = pe_read_short(p->cfh_size_of_opt_hdr); m->cfh_characteristics = pe_read_short(p->cfh_characteristics); diff --git a/src/reader/pe_read_coff_symbol.c b/src/reader/pe_read_coff_symbol.c index 9e2dc89..efd226a 100644 --- a/src/reader/pe_read_coff_symbol.c +++ b/src/reader/pe_read_coff_symbol.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_dos_header.c b/src/reader/pe_read_dos_header.c index caf7fa3..081f5aa 100644 --- a/src/reader/pe_read_dos_header.c +++ b/src/reader/pe_read_dos_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_export_header.c b/src/reader/pe_read_export_header.c index 95971f7..de98d1d 100644 --- a/src/reader/pe_read_export_header.c +++ b/src/reader/pe_read_export_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_import_header.c b/src/reader/pe_read_import_header.c index a8e3aa3..a41494f 100644 --- a/src/reader/pe_read_import_header.c +++ b/src/reader/pe_read_import_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_optional_header.c b/src/reader/pe_read_optional_header.c index bc65d23..0c4fa35 100644 --- a/src/reader/pe_read_optional_header.c +++ b/src/reader/pe_read_optional_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ diff --git a/src/reader/pe_read_section_header.c b/src/reader/pe_read_section_header.c index 383539b..4a2c7f5 100644 --- a/src/reader/pe_read_section_header.c +++ b/src/reader/pe_read_section_header.c @@ -1,6 +1,6 @@ /***************************************************************/ /* perk: PE Resource Kit */ -/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.PERK. */ /***************************************************************/ |