TEST(fixHooks, fixHook2) { ReloadLibrary(); HMODULE h2 = GetModuleHandleA("SampleDll2.dll"); uint32_t entryPoint = GetAddressOfEntryPoint(h2); auto entryPointHook = HookEngine::createHook<HookEngine::Stdcall, BOOL, HMODULE, DWORD, LPVOID>(entryPoint); entryPointHook->assignHook([entryPointHook](HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) -> BOOL { return entryPointHook->original(hModule, ul_reason_for_call, lpReserved); }); uint32_t target = (uint32_t)GetProcAddress(h2, "fixHookTarget2"); ASSERT_EQ(5067, ((fnFixHook)target)(5, 6, 7)); auto hook = HookEngine::createHook<HookEngine::Stdcall, int, int, int, int>(L"SampleDll2.dll", "fixHookTarget2"); hook->assignHook([hook] (int a1, int a2, int a3) -> int { return 10000 + hook->original(a1,a2,a3); }); ASSERT_EQ(15067, ((fnFixHook)target)(5, 6, 7)); hook->makePersistent(); ReloadLibrary(); h2 = GetModuleHandleA("SampleDll2.dll"); target = (uint32_t)GetProcAddress(h2, "fixHookTarget2"); ASSERT_EQ(15067, ((fnFixHook)target)(5,6,7)); }
TEST(TemplateHook64, hookWithTemplate_mixArgs) { int intRes = 0; float floatRes = 0.0f; int res = targetTemplate_MixArgs(700, 700, 30, 30, intRes, floatRes); ASSERT_EQ(42, res); ASSERT_EQ(1730, intRes); ASSERT_FLOAT_EQ(1730.0f, floatRes); intRes = 0; floatRes = 0.0f; res = 0; uintptr_t target = (uintptr_t)targetTemplate_MixArgs; auto hook = HookEngine::createHook<HookEngine::Win64, int, int, float, int, float, int&, float&>(target); hook->assignHook([hook](int a1, float a2, int a3, float a4, int& intResult, float& floatResult) -> int { int res = hook->original(a1, a2, a3, a4, intResult, floatResult); intResult += 10000; floatResult += 10000.0f; return res + 1; }); res = targetTemplate_MixArgs(700, 700, 30, 30, intRes, floatRes); ASSERT_EQ(43, res); ASSERT_EQ(11730, intRes); ASSERT_FLOAT_EQ(11730.0f, floatRes); }
TEST(Fastcall, Sample4) { ASSERT_EQ(72, targetFastcallFunc4(30)); auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int>((uint32_t)targetFastcallFunc4); hook->assignHook([hook](int a1) -> int { return 10 + hook->original(a1); }); ASSERT_EQ(82, targetFastcallFunc4(30)); }
TEST(Fastcall, Sample) { ASSERT_EQ(102, targetFastcallFunc1(10, 20, 30)); auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int, int, int>((uint32_t)targetFastcallFunc1); hook->assignHook([hook](int a1, int a2, int a3) -> int { return 10 + hook->original(a1, a2, a3); }); ASSERT_EQ(112, targetFastcallFunc1(10, 20, 30)); }
TEST(TemplateHook64, hookWithTemplate_args2) { uintptr_t target = (uintptr_t)targetTemplate_Args2; auto hook = HookEngine::createHook<HookEngine::Win64, int, int, int>(target); hook->assignHook([hook](int a1, int a2) -> int { int result = hook->original(a1, a2); return result + 10000; }); int q = targetTemplate_Args2(5, 60); ASSERT_EQ(20065, q); }
TEST(TemplateHook64, hookWithTemplate_args5) { uintptr_t target = (uintptr_t)targetTemplate_Args5; auto hook = HookEngine::createHook<HookEngine::Win64, int, int, int, int, int, int>(target); hook->assignHook([hook](int a1, int a2, int a3, int a4, int a5) -> int { int result = hook->original(a1, a2, a3, a4, a5); return result + 10000; }); int q = targetTemplate_Args5(5, 60, 700, 8000, 300000); ASSERT_EQ(328765, q); }
TEST(TemplateHook64, hookWithTemplate_args0) { uintptr_t target = (uintptr_t)targetTemplate_Args0; auto hook = HookEngine::createHook<HookEngine::Win64, int>(target); hook->assignHook([hook]() -> int { int result = hook->original(); return result + 10000; }); int q = targetTemplate_Args0(); ASSERT_EQ(20000, q); }
TEST(fixHooks, fixHook) { ReloadLibrary(); HMODULE h2 = GetModuleHandleA("SampleDll2.dll"); uint32_t target = (uint32_t)GetProcAddress(h2, "fixHookTarget"); ASSERT_EQ(567, ((fnFixHook)target)(5, 6, 7)); auto hook = HookEngine::createHook<HookEngine::Stdcall, int, int, int, int>(target); hook->assignHook([hook] (int a1, int a2, int a3) -> int { return 1000 + hook->original(a1,a2,a3); }); ASSERT_EQ(1567, ((fnFixHook)target)(5, 6, 7)); hook->makePersistent(); ReloadLibrary(); h2 = GetModuleHandleA("SampleDll2.dll"); target = (uint32_t)GetProcAddress(h2, "fixHookTarget"); ASSERT_EQ(1567, ((fnFixHook)target)(5,6,7)); }
TEST(Fastcall, Sample3) { ASSERT_EQ(65, targetFastcallFunc3(1,2,3,4,5,6,7,8,9,10)); auto hook = HookEngine::createHook<HookEngine::Fastcall, int, int, int, int, int, int, int, int, int, int, int>( (uint32_t)targetFastcallFunc3); hook->assignHook([hook]( int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10) -> int { int result = hook->original(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10); return result + 20; }); ASSERT_EQ(85, targetFastcallFunc3(1,2,3,4,5,6,7,8,9,10)); }