Blame src/internal/perk_hdrdump_impl.h

b73ae8
/***************************************************************/
b73ae8
/*  perk: PE Resource Kit                                      */
b73ae8
/*  Copyright (C) 2015--2018  Z. Gilboa                        */
b73ae8
/*  Released under GPLv2 and GPLv3; see COPYING.PERK.          */
b73ae8
/***************************************************************/
b73ae8
b73ae8
#ifndef PERK_HDRDUMP_IMPL_H
b73ae8
#define PERK_HDRDUMP_IMPL_H
b73ae8
b73ae8
#include <stddef.h>
b73ae8
b73ae8
#define PE_QUOTE(s)	#s
b73ae8
#define PE_STRING(s)	PE_QUOTE(s)
b73ae8
#define PE_TYPE(t)	struct pe_raw_ ## t
b73ae8
#define PE_OFFSET(t,x)	offsetof(PE_TYPE(t),x)
b73ae8
#define PE_SIZE(p,x)	sizeof((p)->x)
b73ae8
b73ae8
#define PE_OUTPUT_RAW_ELEMENT_TABLE(ch,p,t,x)   \
b73ae8
	pe_output_raw_element(                  \
b73ae8
		ch,p,                           \
b73ae8
		PE_STRING(x),                   \
b73ae8
		PE_OFFSET(t,x),                 \
b73ae8
		PE_SIZE(p,x))
b73ae8
b73ae8
#define PE_OUTPUT_TABLE(x)              \
b73ae8
	PE_OUTPUT_RAW_ELEMENT_TABLE(    \
b73ae8
		ch,                     \
b73ae8
		PE_ADDR,                \
b73ae8
		PE_RAW_STRUCT,          \
b73ae8
		x)
b73ae8
b73ae8
size_t pe_output_hex_header(
b73ae8
	char *		buf,
b73ae8
	const char * 	sname,
b73ae8
	uint64_t	faddr,
b73ae8
	uint64_t	vaddr,
b73ae8
	int		bits);
b73ae8
b73ae8
size_t pe_output_hex_footer(
b73ae8
	char *		buf);
b73ae8
b73ae8
size_t pe_output_raw_element(
b73ae8
	char *		ch,
b73ae8
	const void *	rdata,
b73ae8
	const char *	mname,
b73ae8
	uint32_t	moffset,
b73ae8
	uint32_t	msize);
b73ae8
71ed2f
static inline int pe_image_bits(const struct pe_image_meta * m)
71ed2f
{
71ed2f
	switch (m->m_abi) {
71ed2f
		case PE_ABI_PE32:
71ed2f
			return 32;
71ed2f
71ed2f
		case PE_ABI_PE64:
71ed2f
			return 64;
71ed2f
71ed2f
		default:
71ed2f
			return -1;
71ed2f
	}
71ed2f
}
71ed2f
b73ae8
#endif