summaryrefslogtreecommitdiff
path: root/src/internal/perk_hexdump_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/perk_hexdump_impl.h')
-rw-r--r--src/internal/perk_hexdump_impl.h63
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