#pragma once #include #include #include #include #include namespace obfuscation{ class obfuscate; } namespace lnk { using obj_buffer_t = std::vector; } namespace theo { using malloc_t = std::function; using memcpy_t = std::function; using resolve_symbol_t = std::function; using mapper_routines_t = std::tuple; class hmm_ctx { public: explicit hmm_ctx(const mapper_routines_t& routines); auto map_objs(std::vector& objs) -> bool; auto get_symbol(std::string symbol_name) -> std::uintptr_t; malloc_t alloc; memcpy_t mcopy; resolve_symbol_t resolve_symbol; private: bool map_symbols(std::vector& objs); bool map_obfuscated_symbols(std::vector& objs); bool resolve_relocs(std::vector& objs); bool alloc_obfuscated_symbol_space(std::vector& objs); bool alloc_symbol_space(std::vector& objs); std::map mapped_symbols; std::map> obfuscated_gadgets; }; }