diff --git a/r5dev/public/tier0/module.h b/r5dev/public/tier0/module.h index 084b1e9f..fff6e80a 100644 --- a/r5dev/public/tier0/module.h +++ b/r5dev/public/tier0/module.h @@ -19,10 +19,10 @@ public: typedef unordered_map ModuleSectionsMap_t; CModule(void) = default; - CModule(const char* szModuleName, const bool bDynamicInit = true); - CModule(const char* szModuleName, const QWORD nModuleBase, const bool bDynamicInit = true); + CModule(const char* szModuleName); + CModule(const QWORD nModuleBase); - void Init(const bool bInitSections); + void Init(); void LoadSections(); CMemory FindPatternSIMD(const char* szPattern, const ModuleSections_t* moduleSection = nullptr) const; diff --git a/r5dev/tier0/module.cpp b/r5dev/tier0/module.cpp index 173262c2..ac411b3d 100644 --- a/r5dev/tier0/module.cpp +++ b/r5dev/tier0/module.cpp @@ -9,39 +9,60 @@ //----------------------------------------------------------------------------- // Purpose: constructor // Input : *szModuleName - -// bDynamicInit - set this to false if there is no memory allocator //----------------------------------------------------------------------------- -CModule::CModule(const char* szModuleName, const bool bDynamicInit) - : m_ModuleName(szModuleName) +CModule::CModule(const char* szModuleName) { m_pModuleBase = reinterpret_cast(GetModuleHandleA(szModuleName)); - Init(bDynamicInit); + + if (!m_pModuleBase) + { + Assert(0); + return; + } + + m_ModuleName = szModuleName; + Init(); } //----------------------------------------------------------------------------- // Purpose: constructor -// Input : *szModuleName - -// nModuleBase - +// Input : *nModuleBase - //----------------------------------------------------------------------------- -CModule::CModule(const char* szModuleName, const QWORD nModuleBase, - const bool bDynamicInit) - : m_ModuleName(szModuleName) - , m_pModuleBase(nModuleBase) +CModule::CModule(const QWORD nModuleBase) { - Init(bDynamicInit); + m_pModuleBase = nModuleBase; + + if(!m_pModuleBase) + { + Assert(0); + return; + } + + Init(); + + CHAR szModuleName[MAX_FILEPATH]; + DWORD m = GetModuleFileNameA(reinterpret_cast(nModuleBase), + szModuleName, sizeof(szModuleName)); + + if ((m - 1) > (sizeof(szModuleName) - 2)) // Too small for buffer. + { + snprintf(szModuleName, sizeof(szModuleName), + "module@%p", (void*)nModuleBase); + m_ModuleName = szModuleName; + } + else + { + m_ModuleName = strrchr(szModuleName, '\\') + 1; + } } //----------------------------------------------------------------------------- // Purpose: initializes module descriptors //----------------------------------------------------------------------------- -void CModule::Init(const bool bInitSections) +void CModule::Init() { - m_nModuleSize = static_cast(GetNTHeaders()->OptionalHeader.SizeOfImage); - - if (bInitSections) - { - LoadSections(); - } + m_nModuleSize = GetNTHeaders()->OptionalHeader.SizeOfImage; + LoadSections(); } //-----------------------------------------------------------------------------