diff options
Diffstat (limited to 'src/internal/perk_hexdump_impl.h')
-rw-r--r-- | src/internal/perk_hexdump_impl.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/internal/perk_hexdump_impl.h b/src/internal/perk_hexdump_impl.h new file mode 100644 index 0000000..379d427 --- /dev/null +++ b/src/internal/perk_hexdump_impl.h @@ -0,0 +1,63 @@ +/***************************************************************/ +/* perk: PE Resource Kit */ +/* Copyright (C) 2015--2021 SysDeer Technologies, LLC */ +/* Released under GPLv2 and GPLv3; see COPYING.PERK. */ +/***************************************************************/ + +#ifndef PERK_HDRDUMP_IMPL_H +#define PERK_HDRDUMP_IMPL_H + +#include <stddef.h> + +#define PE_QUOTE(s) #s +#define PE_STRING(s) PE_QUOTE(s) +#define PE_TYPE(t) struct pe_raw_ ## t +#define PE_OFFSET(t,x) offsetof(PE_TYPE(t),x) +#define PE_SIZE(p,x) sizeof((p)->x) + +#define PE_OUTPUT_RAW_ELEMENT_TABLE(ch,p,t,x) \ + pe_output_raw_element( \ + ch,p, \ + PE_STRING(x), \ + PE_OFFSET(t,x), \ + PE_SIZE(p,x)) + +#define PE_OUTPUT_TABLE(x) \ + PE_OUTPUT_RAW_ELEMENT_TABLE( \ + ch, \ + PE_ADDR, \ + PE_RAW_STRUCT, \ + x) + +size_t pe_output_hex_header( + char * buf, + const char * sname, + uint64_t faddr, + uint64_t vaddr, + int bits); + +size_t pe_output_hex_footer( + char * buf); + +size_t pe_output_raw_element( + char * ch, + const void * rdata, + const char * mname, + uint32_t moffset, + uint32_t msize); + +static inline int pe_image_bits(const struct pe_image_meta * m) +{ + switch (m->m_abi) { + case PE_ABI_PE32: + return 32; + + case PE_ABI_PE64: + return 64; + + default: + return -1; + } +} + +#endif |