From 5254a285195b1030cb4b6e5a41e3197547a723d6 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 1 Sep 2024 09:21:34 +0200 Subject: [PATCH] Fix export collection --- src/windows_emulator/module_mapper.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/windows_emulator/module_mapper.cpp b/src/windows_emulator/module_mapper.cpp index 824940b7..14c06a48 100644 --- a/src/windows_emulator/module_mapper.cpp +++ b/src/windows_emulator/module_mapper.cpp @@ -4,7 +4,7 @@ namespace { - void collect_exports(mapped_binary& binary, const unsigned char* ptr, const IMAGE_OPTIONAL_HEADER& optional_header) + void collect_exports(emulator& emu, mapped_binary& binary, const IMAGE_OPTIONAL_HEADER& optional_header) { auto& export_directory_entry = optional_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]; if (export_directory_entry.VirtualAddress == 0 || export_directory_entry.Size == 0) @@ -12,6 +12,12 @@ namespace return; } + std::vector memory{}; + memory.resize(binary.size_of_image); + emu.read_memory(binary.image_base, memory.data(), memory.size()); + + const uint8_t* ptr = memory.data(); + const auto* export_directory = reinterpret_cast(ptr + export_directory_entry. VirtualAddress); @@ -199,12 +205,7 @@ namespace map_sections(emu, binary, ptr, *nt_headers); apply_relocations(emu, binary, optional_header); - - static int i = 0; - if (++i < 3) - { - collect_exports(binary, ptr, optional_header); - } + collect_exports(emu, binary, optional_header); return binary; }