summaryrefslogtreecommitdiffhomepage
path: root/include/perk/perk_meta.h
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-05-02 10:05:51 -0400
committermidipix <writeonce@midipix.org>2016-11-10 23:35:18 -0500
commitc0fbae7a40c662ae77f59f5f919cd6b88e38a85d (patch)
treead6aaca1b75a1f4b5e9ac533220e382f49489c94 /include/perk/perk_meta.h
parent99ace9f6a21b254216f60613e91191d902daeeb8 (diff)
downloadperk-c0fbae7a40c662ae77f59f5f919cd6b88e38a85d.tar.bz2
perk-c0fbae7a40c662ae77f59f5f919cd6b88e38a85d.tar.xz
initial commit.
Diffstat (limited to 'include/perk/perk_meta.h')
-rw-r--r--include/perk/perk_meta.h222
1 files changed, 222 insertions, 0 deletions
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 <stdint.h>
+
+/* 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