summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/perk/perk.h3
-rw-r--r--include/perk/perk_meta.h8
-rw-r--r--project/common.mk1
-rw-r--r--src/reader/pe_read_coff_reloc.c22
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;
+}