diff options
author | midipix <writeonce@midipix.org> | 2025-06-11 10:08:55 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2025-06-11 10:08:55 +0000 |
commit | 72d820ed4a5390d80457f56cde042f82ddfc5901 (patch) | |
tree | 7e83e01d709ef297a41933638c04b225c2c296f2 /src/output/pe_output_image_sections.c | |
parent | 39eebb91012f75bce9166cb6f5724426730121e0 (diff) | |
download | perk-72d820ed4a5390d80457f56cde042f82ddfc5901.tar.bz2 perk-72d820ed4a5390d80457f56cde042f82ddfc5901.tar.xz |
pe_output_image_sections(): rewrite, produce prettier yaml.
Diffstat (limited to 'src/output/pe_output_image_sections.c')
-rw-r--r-- | src/output/pe_output_image_sections.c | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/src/output/pe_output_image_sections.c b/src/output/pe_output_image_sections.c index 5fb2393..0cb2ffe 100644 --- a/src/output/pe_output_image_sections.c +++ b/src/output/pe_output_image_sections.c @@ -12,26 +12,78 @@ #include "perk_dprintf_impl.h" #include "perk_errinfo_impl.h" -int pe_output_image_sections( +static int pe_output_section_names( const struct pe_driver_ctx * dctx, - const struct pe_image_meta * meta) + const struct pe_image_meta * meta, + int fdout) { - int i; - int fdout; - const char * dash = ""; - - fdout = pe_driver_fdout(dctx); + int i; - if (dctx->cctx->fmtflags & PERK_PRETTY_YAML) { - if (pe_dprintf(fdout,"sections:\n") < 0) + for (i=0; i<meta->m_coff.cfh_num_of_sections; i++) + if (pe_dprintf(fdout,"%s\n",meta->m_sectbl[i].sh_name) < 0) return PERK_FILE_ERROR(dctx); - dash = "- "; - } + return 0; +} + +static int pe_output_section_names_yaml( + const struct pe_driver_ctx * dctx, + const struct pe_image_meta * meta, + int fdout) +{ + int i; + + if (pe_dprintf(fdout," - Sections:\n") < 0) + return PERK_FILE_ERROR(dctx); for (i=0; i<meta->m_coff.cfh_num_of_sections; i++) - if (pe_dprintf(fdout,"%s%s\n",dash,meta->m_sectbl[i].sh_name) < 0) + if (pe_dprintf(fdout," - section: %s\n",meta->m_sectbl[i].sh_name) < 0) return PERK_FILE_ERROR(dctx); return 0; } + +static int pe_output_section_records_yaml( + const struct pe_driver_ctx * dctx, + const struct pe_image_meta * meta, + int fdout) +{ + (void)dctx; + (void)meta; + (void)fdout; + return 0; +} + +static int pe_output_image_sections_yaml( + const struct pe_driver_ctx * dctx, + const struct pe_image_meta * meta, + int fdout) +{ + if (dctx->cctx->fmtflags & PERK_PRETTY_VERBOSE) { + if (pe_output_section_records_yaml(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); + } else { + if (pe_output_section_names_yaml(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); + } + + return 0; +} + +int pe_output_image_sections( + 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_image_sections_yaml(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); + + } else { + if (pe_output_section_names(dctx,meta,fdout) < 0) + return PERK_NESTED_ERROR(dctx); + } + + return 0; +} |