summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2025-05-31 23:03:02 +0000
committermidipix <writeonce@midipix.org>2025-05-31 23:03:02 +0000
commit7b3da5c46dc9716f1996dc7d1f3af37018607c8c (patch)
tree82d1db640d99adabfc7c85281d345c52f8d0fa88 /src
parentd3b5266a2df3a52b0bd36f1de86736fd353a5c4e (diff)
downloadperk-7b3da5c46dc9716f1996dc7d1f3af37018607c8c.tar.bz2
perk-7b3da5c46dc9716f1996dc7d1f3af37018607c8c.tar.xz
utility: pe_cmd_perk(): apply actions to archive members where applicable.
Diffstat (limited to 'src')
-rw-r--r--src/cmds/pe_cmd_perk.c50
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)