fix function finding (restore to ithvnr) - should fix system40 and rugp2 hooks

This commit is contained in:
Akash Mozumdar 2021-03-16 23:49:07 -06:00
parent a8ae2156d9
commit 3c33d11d80
3 changed files with 16 additions and 9 deletions

View File

@ -4494,7 +4494,8 @@ bool InsertRUGP1Hook()
*/ */
bool InsertRUGP2Hook() bool InsertRUGP2Hook()
{ {
if (!Util::CheckFile(L"vm60.dll") /*|| !SafeFillRange(L"vm60.dll", &low, &high)*/) { auto module = GetModuleHandleW(L"vm60.dll");
if (!module /*|| !SafeFillRange(L"vm60.dll", &low, &high)*/) {
ConsoleOutput("vnreng:rUGP2: vm60.dll does not exist"); ConsoleOutput("vnreng:rUGP2: vm60.dll does not exist");
return false; return false;
} }
@ -4508,7 +4509,7 @@ bool InsertRUGP2Hook()
0x89,0x75, 0x0c // 1001e527 8975 0c mov dword ptr ss:[ebp+0xc],esi 0x89,0x75, 0x0c // 1001e527 8975 0c mov dword ptr ss:[ebp+0xc],esi
}; };
enum { addr_offset = 0x1001e51d - 0x1001e515 }; enum { addr_offset = 0x1001e51d - 0x1001e515 };
ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), processStartAddress, processStopAddress); ULONG addr = MemDbg::findBytes(bytes, sizeof(bytes), (DWORD)module, Util::QueryModuleLimits(module).second);
//GROWL_DWORD(addr); //GROWL_DWORD(addr);
if (!addr) { if (!addr) {
ConsoleOutput("vnreng:rUGP2: pattern not found"); ConsoleOutput("vnreng:rUGP2: pattern not found");
@ -4631,20 +4632,15 @@ static void InsertAliceHook2(DWORD addr)
// jichi 5/13/2015: Looking for function entries in StoatSpriteEngine.dll // jichi 5/13/2015: Looking for function entries in StoatSpriteEngine.dll
bool InsertAliceHook() bool InsertAliceHook()
{ {
DWORD addr; if (auto addr = Util::FindFunction("SP_TextDraw")) {
if (addr = (DWORD)GetProcAddress(GetModuleHandleW(L"SACT2.dll"), "SP_TextDraw")) {
InsertAliceHook1(addr); InsertAliceHook1(addr);
return true; return true;
} }
if (addr = (DWORD)GetProcAddress(GetModuleHandleW(L"SACTDX.dll"), "SP_TextDraw")) {
InsertAliceHook1(addr);
return true;
}
//if (GetFunctionAddr("SP_SetTextSprite", &addr, &low, &high, 0) && addr) { //if (GetFunctionAddr("SP_SetTextSprite", &addr, &low, &high, 0) && addr) {
// InsertAliceHook2(addr); // InsertAliceHook2(addr);
// return true; // return true;
//} //}
if (addr = (DWORD)GetProcAddress(GetModuleHandleW(L"StoatSpriteEngine.dll"), "SP_SetTextSprite")) { // Artikash 6/27/2018 not sure if this works if (auto addr = Util::FindFunction("SP_SetTextSprite")) { // Artikash 6/27/2018 not sure if this works
InsertAliceHook2(addr); InsertAliceHook2(addr);
return true; return true;
} }

View File

@ -6,6 +6,7 @@
#include "util/util.h" #include "util/util.h"
#include "ithsys/ithsys.h" #include "ithsys/ithsys.h"
#include "main.h" #include "main.h"
#include <Psapi.h>
namespace { // unnamed namespace { // unnamed
@ -345,6 +346,15 @@ std::vector<uint64_t> SearchMemory(const void* bytes, short length, DWORD protec
return ret; return ret;
} }
uintptr_t FindFunction(const char* function)
{
static HMODULE modules[300] = {};
static auto _ = EnumProcessModules(GetCurrentProcess(), modules, sizeof(modules), DUMMY);
for (auto module : modules) if (auto addr = GetProcAddress(module, function)) return (uintptr_t)addr;
return 0;
}
} }
// EOF // EOF

View File

@ -22,6 +22,7 @@ bool SearchResourceString(LPCWSTR str);
std::pair<uint64_t, uint64_t> QueryModuleLimits(HMODULE module); std::pair<uint64_t, uint64_t> QueryModuleLimits(HMODULE module);
std::vector<uint64_t> SearchMemory(const void* bytes, short length, DWORD protect = PAGE_EXECUTE, uintptr_t minAddr = 0, uintptr_t maxAddr = -1ULL); std::vector<uint64_t> SearchMemory(const void* bytes, short length, DWORD protect = PAGE_EXECUTE, uintptr_t minAddr = 0, uintptr_t maxAddr = -1ULL);
uintptr_t FindFunction(const char* function);
} // namespace Util } // namespace Util