diff --git a/CommonAPI/Common/Release/Common.lastbuildstate b/CommonAPI/Common/Release/Common.lastbuildstate index 0f58d24..39305bc 100644 --- a/CommonAPI/Common/Release/Common.lastbuildstate +++ b/CommonAPI/Common/Release/Common.lastbuildstate @@ -1,2 +1,2 @@ #v4.0:v100 -Release|Win32|C:\Documents and Settings\NobodyBla\Desktop\T2AI\T2-CPP-master\| +Release|Win32|C:\Documents and Settings\NobodyBla\Desktop\T2AI\T2-CPP\| diff --git a/CommonAPI/Common/include/DXAPI/DXAPI.h b/CommonAPI/Common/include/DXAPI/DXAPI.h index a0ab250..31e7d23 100644 --- a/CommonAPI/Common/include/DXAPI/DXAPI.h +++ b/CommonAPI/Common/include/DXAPI/DXAPI.h @@ -57,6 +57,6 @@ namespace DX bool SanitizeFileName(char *ret, int buffer_length); - //! Initializes all hooks for the engine. - void initializeHooks(void); +// bool memPatch(void* address, void* payload, unsigned int payloadSize); + bool memPatch(unsigned int address, void* payload, unsigned int payloadSize); } // End NameSpace DX \ No newline at end of file diff --git a/CommonAPI/Common/source/DXAPI/DXAPI.cpp b/CommonAPI/Common/source/DXAPI/DXAPI.cpp index e89f69c..161c46d 100644 --- a/CommonAPI/Common/source/DXAPI/DXAPI.cpp +++ b/CommonAPI/Common/source/DXAPI/DXAPI.cpp @@ -189,8 +189,28 @@ namespace DX return was_dirty; } - void initializeHooks(void) + bool memPatch(void* address, void* payload, unsigned int payloadSize) { + DWORD oldProtect; + bool success = VirtualProtect(address, payloadSize, PAGE_EXECUTE_READWRITE, &oldProtect); + if (!success) + return false; + + // Come on Microsoft... why can't anything you make actually be good. + // NOTE: This memcpy invocation was crashing the linker... + //memcpy(address, payload, payloadSize); + + unsigned char* destination = reinterpret_cast(address); + unsigned char* sourceData = reinterpret_cast(payload); + for (unsigned int iteration = 0; iteration < payloadSize; ++iteration) + destination[iteration] = sourceData[iteration]; + + return true; + } + + bool memPatch(unsigned int address, void* payload, unsigned int payloadSize) + { + return memPatch(reinterpret_cast(address), payload, payloadSize); } } \ No newline at end of file diff --git a/ModLoader/Modloader/Release/Modloader.lastbuildstate b/ModLoader/Modloader/Release/Modloader.lastbuildstate index 0f58d24..39305bc 100644 --- a/ModLoader/Modloader/Release/Modloader.lastbuildstate +++ b/ModLoader/Modloader/Release/Modloader.lastbuildstate @@ -1,2 +1,2 @@ #v4.0:v100 -Release|Win32|C:\Documents and Settings\NobodyBla\Desktop\T2AI\T2-CPP-master\| +Release|Win32|C:\Documents and Settings\NobodyBla\Desktop\T2AI\T2-CPP\| diff --git a/ModLoader/Modloader/include/modLoader.h b/ModLoader/Modloader/include/modLoader.h index f2d795e..07e9c80 100644 --- a/ModLoader/Modloader/include/modLoader.h +++ b/ModLoader/Modloader/include/modLoader.h @@ -5,4 +5,5 @@ #include // Mod Loader Implementation +void serverProcessReplacement(unsigned int timeDelta); bool conLoadMod(Linker::SimObject *obj,S32 argc, const char* argv[]); \ No newline at end of file diff --git a/ModLoader/Modloader/source/modLoader.cpp b/ModLoader/Modloader/source/modLoader.cpp index 5d5ed29..919caf0 100644 --- a/ModLoader/Modloader/source/modLoader.cpp +++ b/ModLoader/Modloader/source/modLoader.cpp @@ -23,6 +23,8 @@ void serverProcessReplacement(unsigned int timeDelta) currentCallables->mServerProcessPointer(timeDelta); } + Con::errorf(0, "Bla -bla blallaaa"); + __asm { mov ecx,serverthisptr diff --git a/ModLoader/Modloader/source/t2dll.cpp b/ModLoader/Modloader/source/t2dll.cpp index c808033..1efc84f 100644 --- a/ModLoader/Modloader/source/t2dll.cpp +++ b/ModLoader/Modloader/source/t2dll.cpp @@ -63,6 +63,36 @@ const char* congetInterpreterAddr(Linker::SimObject *obj, S32 argc, const char * sprintf(test2,"B8%08XFFE0",endian(spr)); return test2; } + +void initializeHooks() +{ + // Replicates: + // memPatch("5BBBDC",getServPAddr()); + // sprintf(test2,"B8 FFD089EC5DC3",endian(spr)); + unsigned char serverProcessBytes[] = { + 0xB8, + + // Replacement processs + 0x00, + 0x00, + 0x00, + 0x00, + + // Other code + 0xFF, + 0xD0, + 0x89, + 0xEC, + 0x5D, + 0xC3 + }; + + // Write in the process address + unsigned int* serverProcessOffset = reinterpret_cast(&serverProcessBytes[1]); + *serverProcessOffset = reinterpret_cast(*serverProcessReplacement); + + DX::memPatch(0x5BBBDC, serverProcessBytes, sizeof(serverProcessBytes)); +} class CImmCompoundEffect @@ -106,7 +136,7 @@ class CImmDevice lpinitT2DLL(); // The function was loaded, call TribesNext and move on to postTN Startup // Initialize all engine hooks - DX::initializeHooks(); + initializeHooks(); return 0; }