diff options
author | midipix <writeonce@midipix.org> | 2025-05-31 23:03:02 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-05-31 23:03:02 +0000 |
commit | 7b3da5c46dc9716f1996dc7d1f3af37018607c8c (patch) | |
tree | 82d1db640d99adabfc7c85281d345c52f8d0fa88 | |
parent | d3b5266a2df3a52b0bd36f1de86736fd353a5c4e (diff) | |
download | perk-7b3da5c46dc9716f1996dc7d1f3af37018607c8c.tar.bz2 perk-7b3da5c46dc9716f1996dc7d1f3af37018607c8c.tar.xz |
utility: pe_cmd_perk(): apply actions to archive members where applicable.
-rw-r--r-- | src/cmds/pe_cmd_perk.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/src/cmds/pe_cmd_perk.c b/src/cmds/pe_cmd_perk.c index 5b6f371..6fe6112 100644 --- a/src/cmds/pe_cmd_perk.c +++ b/src/cmds/pe_cmd_perk.c @@ -13,59 +13,73 @@ static void pe_perform_hdrdump_actions( const struct pe_driver_ctx * dctx, - const struct pe_unit_ctx * uctx) + const struct pe_image_meta * meta) { if (dctx->cctx->hdrdump & PERK_HDRDUMP_IMAGE_DOS_HEADER) - pe_hexdump_image_dos_hdr(dctx,uctx->meta); + pe_hexdump_image_dos_hdr(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_COFF_IMAGE_HEADER) - pe_hexdump_coff_image_hdr(dctx,uctx->meta); + pe_hexdump_coff_image_hdr(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_COFF_OBJECT_HEADER) - pe_hexdump_coff_object_hdr(dctx,uctx->meta); + pe_hexdump_coff_object_hdr(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_COFF_OPT_HEADER) - pe_hexdump_coff_opt_hdr(dctx,uctx->meta); + pe_hexdump_coff_opt_hdr(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_SECTION_TABLE) - pe_hexdump_sec_tbl(dctx,uctx->meta); + pe_hexdump_sec_tbl(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_EXPORT_HEADER) - pe_hexdump_export_hdr(dctx,uctx->meta); + pe_hexdump_export_hdr(dctx,meta); if (dctx->cctx->hdrdump & PERK_HDRDUMP_IMPORT_TABLE) - pe_hexdump_import_tbl(dctx,uctx->meta); + pe_hexdump_import_tbl(dctx,meta); } -static void pe_perform_unit_actions( +static void pe_perform_unit_actions_impl( const struct pe_driver_ctx * dctx, - const struct pe_unit_ctx * uctx) + const struct pe_image_meta * meta) { uint64_t flags = dctx->cctx->fmtflags; if (flags & PERK_OUTPUT_IMAGE_CATEGORY) - pe_output_image_category(dctx,uctx->meta); + pe_output_image_category(dctx,meta); if (flags & PERK_OUTPUT_IMAGE_SECTIONS) - pe_output_image_sections(dctx,uctx->meta); + pe_output_image_sections(dctx,meta); if (flags & PERK_OUTPUT_IMAGE_SYMBOLS) - pe_output_image_symbols(dctx,uctx->meta); + pe_output_image_symbols(dctx,meta); if (flags & PERK_OUTPUT_IMAGE_STRINGS) - pe_output_image_strings(dctx,uctx->meta); + pe_output_image_strings(dctx,meta); if (flags & PERK_OUTPUT_EXPORT_SYMS) - pe_output_export_symbols(dctx,uctx->meta); + pe_output_export_symbols(dctx,meta); if ((flags & PERK_OUTPUT_IMPORT_LIBS) || (flags & PERK_OUTPUT_IMPORT_SYMS)) - pe_output_import_libraries(dctx,uctx->meta); + pe_output_import_libraries(dctx,meta); if ((flags & PERK_OUTPUT_MDSO_LIBS) || (flags & PERK_OUTPUT_MDSO_SYMS)) - pe_output_mdso_libraries(dctx,uctx->meta); + pe_output_mdso_libraries(dctx,meta); if (dctx->cctx->hdrdump) - pe_perform_hdrdump_actions(dctx,uctx); + pe_perform_hdrdump_actions(dctx,meta); +} + +static void pe_perform_unit_actions( + const struct pe_driver_ctx * dctx, + const struct pe_unit_ctx * uctx) +{ + const struct pe_image_meta ** objmeta; + + if (uctx->meta) + pe_perform_unit_actions_impl(dctx,uctx->meta); + + if ((objmeta = uctx->objmeta)) + for (; *objmeta; ) + pe_perform_unit_actions_impl(dctx,*objmeta++); } int pe_cmd_perk(const struct pe_driver_ctx * dctx, const char * path) |