Move module manager into windows emulator

This commit is contained in:
momo5502
2025-02-10 16:48:15 +01:00
parent 7ae36a6452
commit 349ef9688a
9 changed files with 45 additions and 34 deletions

View File

@@ -27,12 +27,11 @@
struct process_context
{
process_context(x64_emulator& emu, memory_manager& memory, file_system& file_sys)
process_context(x64_emulator& emu, memory_manager& memory)
: base_allocator(emu),
peb(emu),
process_params(emu),
kusd(memory, *this),
mod_manager(memory, file_sys)
kusd(memory, *this)
{
}
@@ -49,8 +48,7 @@ struct process_context
emulator_object<RTL_USER_PROCESS_PARAMETERS64> process_params;
kusd_mmio kusd;
module_manager mod_manager;
// TODO: Remove this
mapped_module* executable{};
mapped_module* ntdll{};
mapped_module* win32u{};
@@ -86,7 +84,6 @@ struct process_context
buffer.write(this->peb);
buffer.write(this->process_params);
buffer.write(this->kusd);
buffer.write(this->mod_manager);
buffer.write(this->executable->image_base);
buffer.write(this->ntdll->image_base);
@@ -124,15 +121,16 @@ struct process_context
buffer.read(this->peb);
buffer.read(this->process_params);
buffer.read(this->kusd);
buffer.read(this->mod_manager);
const auto executable_base = buffer.read<uint64_t>();
const auto ntdll_base = buffer.read<uint64_t>();
const auto win32u_base = buffer.read<uint64_t>();
this->executable = this->mod_manager.find_by_address(executable_base);
this->ntdll = this->mod_manager.find_by_address(ntdll_base);
this->win32u = this->mod_manager.find_by_address(win32u_base);
auto& mod_manager = buffer.read<module_manager_wrapper>().get();
this->executable = mod_manager.find_by_address(executable_base);
this->ntdll = mod_manager.find_by_address(ntdll_base);
this->win32u = mod_manager.find_by_address(win32u_base);
buffer.read(this->ldr_initialize_thunk);
buffer.read(this->rtl_user_thread_start);