diff options
| -rw-r--r-- | loader/server/manual_map.cpp | 15 |
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);
|
