summaryrefslogtreecommitdiff
path: root/loader/server/manual_map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'loader/server/manual_map.cpp')
-rw-r--r--loader/server/manual_map.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/loader/server/manual_map.cpp b/loader/server/manual_map.cpp
index 86aae27..8198c3e 100644
--- a/loader/server/manual_map.cpp
+++ b/loader/server/manual_map.cpp
@@ -164,10 +164,21 @@ namespace inject {
}
bool c_mapper::process_imports(uint32_t /*remote_address*/) {
+ IMAGE_DOS_HEADER *dos_header;
+ IMAGE_NT_HEADERS *nt_headers;
+
+ dos_header = reinterpret_cast<decltype(dos_header)>(m_pe.data());
+ nt_headers = reinterpret_cast<decltype(nt_headers)>(m_pe.data() + dos_header->e_lfanew);
+
+ IMAGE_THUNK_DATA* orig_first_thunk;
+ IMAGE_THUNK_DATA* first_thunk;
+ IMAGE_IMPORT_DESCRIPTOR* import_dir;
+ IMAGE_IMPORT_BY_NAME* import_table;
+
return true;
}
- bool c_mapper::process_reloc(uint32_t /*remote_address*/) {
+ bool c_mapper::process_reloc(uint32_t remote_address) {
IMAGE_DOS_HEADER *dos_header;
IMAGE_NT_HEADERS *nt_headers;
@@ -182,7 +193,7 @@ namespace inject {
IMAGE_BASE_RELOCATION *reloc;
uintptr_t address = nt_headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
- uintptr_t delta = (uintptr_t)m_pe.data() - nt_headers->OptionalHeader.ImageBase;
+ uintptr_t delta = remote_address - nt_headers->OptionalHeader.ImageBase;
reloc = reinterpret_cast<decltype(reloc)>(m_pe.data() + address);