#pragma once #include "utils.hpp" #include #include #pragma comment(lib, "Dbghelp.lib") namespace drv { using kalloc_t = std::function; using kmemcpy_t = std::function; using kmemset_t = std::function; using image_base_t = std::uintptr_t; using image_entry_t = std::uintptr_t; using mapper_routines_t = std::pair; using drv_buffer_t = std::vector; class hmdm_ctx { public: explicit hmdm_ctx(const mapper_routines_t& routines); auto map_module(drv_buffer_t& drv_buffer, bool zero_headers = true)->std::pair; const kalloc_t kalloc; const kmemcpy_t kmemcpy; private: auto resolve_imports(drv_buffer_t& drv_buffer) const -> void; auto fix_relocs(drv_buffer_t& drv_buffer, uint8_t* alloc_base) const -> void; }; }