From c0fbae7a40c662ae77f59f5f919cd6b88e38a85d Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 2 May 2015 10:05:51 -0400 Subject: initial commit. --- include/perk/perk_meta.h | 222 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 include/perk/perk_meta.h (limited to 'include/perk/perk_meta.h') diff --git a/include/perk/perk_meta.h b/include/perk/perk_meta.h new file mode 100644 index 0000000..e3f3375 --- /dev/null +++ b/include/perk/perk_meta.h @@ -0,0 +1,222 @@ +#ifndef PERK_META_H +#define PERK_META_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* generic block info / image directory header */ +struct pe_block { + uint32_t rva; + uint32_t size; +}; + + +/* image dos header */ +struct pe_meta_image_dos_hdr { + unsigned char dos_magic[2]; + uint16_t dos_cblp; + uint16_t dos_cp; + uint16_t dos_crlc; + uint16_t dos_cparhdr; + uint16_t dos_minalloc; + uint16_t dos_maxalloc; + uint16_t dos_ss; + uint16_t dos_sp; + uint16_t dos_csum; + uint16_t dos_ip; + uint16_t dos_cs; + uint16_t dos_lfarlc; + uint16_t dos_ovno; + uint16_t dos_res[4]; + uint16_t dos_oemid; + uint16_t dos_oeminfo; + uint16_t dos_res2[10]; + uint32_t dos_lfanew; +}; + + +/* pe/coff file header */ +struct pe_meta_coff_file_hdr { + unsigned char signature[4]; + uint16_t machine; + uint16_t num_of_sections; + uint32_t time_date_stamp; + uint32_t ptr_to_sym_tbl; + uint32_t num_of_syms; + uint16_t size_of_opt_hdr; + uint16_t characteristics; +}; + + +/* image optional header */ +struct pe_meta_opt_hdr_std { + uint16_t magic; + uint8_t major_linker_ver; + uint8_t minor_linker_ver; + uint32_t size_of_code; + uint32_t size_of_initialized_data; + uint32_t size_of_uninitialized_data; + uint32_t entry_point; + uint32_t base_of_code; +}; + +struct pe_meta_opt_hdr_vers { + uint16_t major_os_ver; + uint16_t minor_or_ver; + uint16_t major_image_ver; + uint16_t minor_image_ver; + uint16_t major_subsys_ver; + uint16_t minor_subsys_ver; + uint32_t win32_ver; +}; + +struct pe_meta_opt_hdr_align { + uint32_t section_align; + uint32_t file_align; +}; + +struct pe_meta_opt_hdr_img { + uint32_t size_of_image; + uint32_t size_of_headers; + uint32_t checksum; + uint16_t subsystem; + uint16_t dll_characteristics; +}; + +struct pe_meta_opt_hdr_ldr { + uint32_t loader_flags; + uint32_t rva_and_sizes; +}; + +struct pe_meta_opt_hdr_dirs { + struct pe_block export_tbl; + struct pe_block import_tbl; + struct pe_block resource_tbl; + struct pe_block exception_tbl; + struct pe_block certificate_tbl; + struct pe_block base_reloc_tbl; + struct pe_block debug; + struct pe_block arch; + struct pe_block global_ptr; + struct pe_block tls_tbl; + struct pe_block load_config_tbl; + struct pe_block bound_import; + struct pe_block iat; + struct pe_block delay_import_descriptor; + struct pe_block clr_runtime_hdr; + struct pe_block reserved; +}; + +struct pe_meta_opt_hdr_mem_32 { + uint32_t base_of_data; + uint32_t image_base; + uint32_t size_of_stack_reserve; + uint32_t size_of_stack_commit; + uint32_t size_of_heap_reserve; + uint32_t size_of_heap_commit; +}; + +struct pe_meta_opt_hdr_mem_64 { + uint64_t image_base; + uint64_t size_of_stack_reserve; + uint64_t size_of_stack_commit; + uint64_t size_of_heap_reserve; + uint64_t size_of_heap_commit; +}; + +struct pe_meta_opt_hdr_mem { + uint64_t base_of_data; + uint64_t image_base; + uint64_t size_of_stack_reserve; + uint64_t size_of_stack_commit; + uint64_t size_of_heap_reserve; + uint64_t size_of_heap_commit; +}; + +struct pe_meta_opt_hdr { + struct pe_meta_opt_hdr_std std; + struct pe_meta_opt_hdr_vers vers; + struct pe_meta_opt_hdr_align align; + struct pe_meta_opt_hdr_img img; + struct pe_meta_opt_hdr_ldr ldr; + struct pe_meta_opt_hdr_mem mem; + struct pe_meta_opt_hdr_dirs dirs; +}; + + +/* section header */ +struct pe_meta_sec_hdr { + char name[16]; + char * long_name; + uint32_t virtual_size; + uint32_t virtual_addr; + uint32_t size_of_raw_data; + uint32_t ptr_to_raw_data; + uint32_t ptr_to_relocs; + uint32_t ptr_to_line_nums; + uint16_t num_of_relocs; + uint16_t num_of_line_nums; + uint32_t characteristics; +}; + + +/* .edata section header*/ +struct pe_meta_export_hdr { + uint32_t export_flags; + uint32_t time_date_stamp; + uint16_t major_ver; + uint16_t minor_ver; + uint32_t name_rva; + uint32_t ordinal_base; + uint32_t addr_tbl_entries; + uint32_t num_of_name_ptrs; + uint32_t export_addr_tbl_rva; + uint32_t name_ptr_rva; + uint32_t ordinal_tbl_rva; +}; + + +/* export rva */ +union pe_meta_export_addr_tbl { + uint32_t export_rva; + uint32_t forwarder_rva; +}; + + +/* image: import table entry lookup item */ +struct pe_meta_import_lookup_item { + union { + uint64_t import_lookup_entry_64; + uint32_t import_lookup_entry_32; + uint32_t hint_name_tbl_rva; + uint16_t ordinal_number; + } u; + + uint32_t flags; + uint16_t hint; + char * name; +}; + + +/* image: import directory table entry */ +struct pe_meta_import_hdr { + uint32_t import_lookup_tbl_rva; + uint32_t time_date_stamp; + uint32_t forwarder_chain; + uint32_t name_rva; + uint32_t import_addr_tbl_rva; + uint32_t count; + char * name; + struct pe_meta_import_lookup_item * items; + struct pe_import_lookup_item * aitems; +}; + + +#ifdef __cplusplus +} +#endif + +#endif -- cgit v1.2.3