diff options
-rw-r--r-- | include/perk/perk.h | 3 | ||||
-rw-r--r-- | include/perk/perk_meta.h | 8 | ||||
-rw-r--r-- | project/common.mk | 1 | ||||
-rw-r--r-- | src/reader/pe_read_coff_reloc.c | 22 |
4 files changed, 34 insertions, 0 deletions
diff --git a/include/perk/perk.h b/include/perk/perk.h index 59b55e5..001f26c 100644 --- a/include/perk/perk.h +++ b/include/perk/perk.h @@ -127,6 +127,7 @@ struct pe_raw_image; struct pe_raw_image_dos_hdr; struct pe_raw_coff_image_hdr; struct pe_raw_coff_object_hdr; +struct pe_raw_coff_reloc; union pe_raw_opt_hdr; struct pe_raw_sec_hdr; struct pe_raw_export_hdr; @@ -352,10 +353,12 @@ perk_api int pe_read_optional_header (const union pe_raw_opt_hdr *, perk_api int pe_read_section_header (const struct pe_raw_sec_hdr *, struct pe_meta_sec_hdr *); perk_api int pe_read_export_header (const struct pe_raw_export_hdr *, struct pe_meta_export_hdr *); perk_api int pe_read_import_header (const struct pe_raw_import_hdr *, struct pe_meta_import_hdr *); +perk_api int pe_read_coff_reloc (const struct pe_raw_coff_reloc *, struct pe_meta_coff_reloc *); perk_api int pe_read_coff_symbol (const struct pe_raw_coff_symbol *, struct pe_meta_coff_symbol *, const struct pe_meta_coff_file_hdr *, void * base); + perk_api int pe_read_import_lookup (const unsigned char *, struct pe_meta_import_lookup *, uint32_t magic); diff --git a/include/perk/perk_meta.h b/include/perk/perk_meta.h index 5a4136f..2b6b0ef 100644 --- a/include/perk/perk_meta.h +++ b/include/perk/perk_meta.h @@ -196,6 +196,14 @@ struct pe_meta_sec_hdr { }; +/* section relocation record */ +struct pe_meta_coff_reloc { + uint32_t rel_rva; + uint32_t rel_sym; + uint16_t rel_type; +}; + + /* .edata section header*/ struct pe_meta_export_hdr { uint32_t eh_virtual_addr; diff --git a/project/common.mk b/project/common.mk index 8eab6ac..639224d 100644 --- a/project/common.mk +++ b/project/common.mk @@ -37,6 +37,7 @@ API_SRCS = \ src/reader/pe_read_aux_rec_section.c \ src/reader/pe_read_aux_rec_weaksym.c \ src/reader/pe_read_coff_header.c \ + src/reader/pe_read_coff_reloc.c \ src/reader/pe_read_coff_symbol.c \ src/reader/pe_read_dos_header.c \ src/reader/pe_read_export_header.c \ diff --git a/src/reader/pe_read_coff_reloc.c b/src/reader/pe_read_coff_reloc.c new file mode 100644 index 0000000..9095cdd --- /dev/null +++ b/src/reader/pe_read_coff_reloc.c @@ -0,0 +1,22 @@ +/***************************************************************/ +/* perk: PE Resource Kit */ +/* Copyright (C) 2015--2025 SysDeer Technologies, LLC */ +/* Released under GPLv2 and GPLv3; see COPYING.PERK. */ +/***************************************************************/ + +#include <perk/perk.h> +#include <perk/perk_consts.h> +#include <perk/perk_structs.h> +#include "perk_endian_impl.h" +#include "perk_reader_impl.h" + +int pe_read_coff_reloc( + const struct pe_raw_coff_reloc * p, + struct pe_meta_coff_reloc * m) +{ + m->rel_rva = pe_read_long(p->rel_rva); + m->rel_sym = pe_read_long(p->rel_sym); + m->rel_type = pe_read_long(p->rel_type); + + return 0; +} |