From e3429705eb621d63ab1939569fd5e3c2ecfa2822 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 1 Apr 2023 01:27:04 +0200 Subject: [PATCH] Fix crash caused by CAppSystemGroup changes * Moved 'm_pFileSystem' to 'CSourceAppSystemGroup' (actually belongs there, CAppSystemGroup has to be 0xA8 in size in order for 'm_bDedicated' to line up in 'CModAppSystemGroup'). * Prefixed all static functions with 'Static' to avoid name collisions. --- r5dev/launcher/IApplication.cpp | 8 +++--- r5dev/launcher/IApplication.h | 27 ++++++++++--------- r5dev/public/appframework/IAppSystemGroup.cpp | 6 ++--- r5dev/public/appframework/IAppSystemGroup.h | 4 +-- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp index 73f8db32..a8d0c3b3 100644 --- a/r5dev/launcher/IApplication.cpp +++ b/r5dev/launcher/IApplication.cpp @@ -36,7 +36,7 @@ //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- -bool CSourceAppSystemGroup::PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup) +bool CSourceAppSystemGroup::StaticPreInit(CSourceAppSystemGroup* pSourceAppSystemGroup) { if (pSourceAppSystemGroup->GetCurrentStage() == CSourceAppSystemGroup::CREATION) { @@ -53,7 +53,7 @@ bool CSourceAppSystemGroup::PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- -bool CSourceAppSystemGroup::Create(CSourceAppSystemGroup* pSourceAppSystemGroup) +bool CSourceAppSystemGroup::StaticCreate(CSourceAppSystemGroup* pSourceAppSystemGroup) { return CSourceAppSystemGroup__Create(pSourceAppSystemGroup); } @@ -61,7 +61,7 @@ bool CSourceAppSystemGroup::Create(CSourceAppSystemGroup* pSourceAppSystemGroup) //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- -int CModAppSystemGroup::Main(CModAppSystemGroup* pModAppSystemGroup) +int CModAppSystemGroup::StaticMain(CModAppSystemGroup* pModAppSystemGroup) { std::thread fixed(&CEngineSDK::FixedFrame, g_EngineSDK); fixed.detach(); @@ -90,7 +90,7 @@ int CModAppSystemGroup::Main(CModAppSystemGroup* pModAppSystemGroup) //----------------------------------------------------------------------------- // Purpose: Instantiate all main libraries //----------------------------------------------------------------------------- -bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup) +bool CModAppSystemGroup::StaticCreate(CModAppSystemGroup* pModAppSystemGroup) { #ifdef DEDICATED pModAppSystemGroup->SetServerOnly(); diff --git a/r5dev/launcher/IApplication.h b/r5dev/launcher/IApplication.h index a6e89ff5..27de0e6d 100644 --- a/r5dev/launcher/IApplication.h +++ b/r5dev/launcher/IApplication.h @@ -8,8 +8,11 @@ class CSourceAppSystemGroup : public CAppSystemGroup { public: - static bool PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup); - static bool Create(CSourceAppSystemGroup* pSourceAppSystemGroup); + static bool StaticPreInit(CSourceAppSystemGroup* pSourceAppSystemGroup); + static bool StaticCreate(CSourceAppSystemGroup* pSourceAppSystemGroup); + +private: + CFileSystem_Stdio* m_pFileSystem; }; //------------------------------------------------------------------------- @@ -18,8 +21,8 @@ public: class CModAppSystemGroup : public CAppSystemGroup { public: - static int Main(CModAppSystemGroup* pModAppSystemGroup); - static bool Create(CModAppSystemGroup* pModAppSystemGroup); + static int StaticMain(CModAppSystemGroup* pModAppSystemGroup); + static bool StaticCreate(CModAppSystemGroup* pModAppSystemGroup); static void InitPluginSystem(CModAppSystemGroup* pModAppSystemGroup); bool IsServerOnly(void) const @@ -88,19 +91,19 @@ class VApplication : public IDetour virtual void GetCon(void) const { } virtual void Attach(void) const { - DetourAttach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::PreInit); - DetourAttach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::Create); + DetourAttach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::StaticPreInit); + DetourAttach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::StaticCreate); - DetourAttach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::Main); - DetourAttach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::Create); + DetourAttach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::StaticMain); + DetourAttach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::StaticCreate); } virtual void Detach(void) const { - DetourDetach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::PreInit); - DetourDetach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::Create); + DetourDetach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::StaticPreInit); + DetourDetach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::StaticCreate); - DetourDetach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::Main); - DetourDetach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::Create); + DetourDetach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::StaticMain); + DetourDetach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::StaticCreate); } }; /////////////////////////////////////////////////////////////////////////////// diff --git a/r5dev/public/appframework/IAppSystemGroup.cpp b/r5dev/public/appframework/IAppSystemGroup.cpp index 3aea921c..6699985f 100644 --- a/r5dev/public/appframework/IAppSystemGroup.cpp +++ b/r5dev/public/appframework/IAppSystemGroup.cpp @@ -12,7 +12,7 @@ //----------------------------------------------------------------------------- // Purpose: Initialize plugin system //----------------------------------------------------------------------------- -void CAppSystemGroup::S_Destroy(CAppSystemGroup* pModAppSystemGroup) +void CAppSystemGroup::StaticDestroy(CAppSystemGroup* pModAppSystemGroup) { CAppSystemGroup_Destroy(pModAppSystemGroup); } @@ -27,9 +27,9 @@ CAppSystemGroup::AppSystemGroupStage_t CAppSystemGroup::GetCurrentStage() const void VAppSystemGroup::Attach(void) const { - DetourAttach(&CAppSystemGroup_Destroy, &CAppSystemGroup::S_Destroy); + DetourAttach(&CAppSystemGroup_Destroy, &CAppSystemGroup::StaticDestroy); } void VAppSystemGroup::Detach(void) const { - DetourDetach(&CAppSystemGroup_Destroy, &CAppSystemGroup::S_Destroy); + DetourDetach(&CAppSystemGroup_Destroy, &CAppSystemGroup::StaticDestroy); } \ No newline at end of file diff --git a/r5dev/public/appframework/IAppSystemGroup.h b/r5dev/public/appframework/IAppSystemGroup.h index 770bd3ec..2c261fa7 100644 --- a/r5dev/public/appframework/IAppSystemGroup.h +++ b/r5dev/public/appframework/IAppSystemGroup.h @@ -71,7 +71,7 @@ public: }; // Detour statics. - static void S_Destroy(CAppSystemGroup* pAppSystemGroup); + static void StaticDestroy(CAppSystemGroup* pAppSystemGroup); // Returns the stage at which the app system group ran into an error AppSystemGroupStage_t GetCurrentStage() const; @@ -90,8 +90,8 @@ protected: CUtlVector m_NonAppSystemFactories; char m_Pad[56]; // <-- unknown AppSystemGroupStage_t m_nCurrentStage; - CFileSystem_Stdio* m_pFileSystem; }; +static_assert(sizeof(CAppSystemGroup) == 0xA8); inline CMemory p_CAppSystemGroup_Destroy; inline auto CAppSystemGroup_Destroy = p_CAppSystemGroup_Destroy.RCast();