我有一個C++ DLL的源代碼。這個DLL是應用程序的一部分。我想掛鉤另一個DLL在內存中加載的函數,這樣我的掛鉤函數就會被所有其他DLL調用,而不是原始函數。我把這個代碼在我的代碼:C++函數鉤子裏面的DLL源代碼
#include <windows.h>
#include "detours.h"
#pragma comment(lib, "detours.lib")
//Function prototype
int (__stdcall* OriginalFunction)();
//Our hook function
int FunctionHook()
{
//Return the real function
return OriginalFunction();
}
//On attach set the hooks
OriginalFunction = (int (__stdcall*)())DetourFunction((PBYTE)0x0100344C, (PBYTE)FunctionHook);
的問題是:是不是錯的,如果我在一個DLL搜索的偏移量,並通過該偏移補丁的功能(我認爲這是更爲複雜,因爲我在另一個DLL中,並想要鉤住所有DLL的函數)?順便說一下,有人知道如何在IDA PRO中獲得標準(fex。0x0100344C)偏移量嗎?
所有的DLL都在一個進程中,它是一個DedicatedServer.exe。如何通過覆蓋內存來掛鉤功能? –
你可以參考這裏[http://xulrunner-1.9.2.sourcearchive.com/documentation/1.9.2.13plus-pbuild1plus-pnobinonly/nsWindowsDllInterceptor_8h-source.html],這是使用「trampline hook」的mozilla源代碼, 。但是,如果你可以使用Detour,我不建議你自己破解代碼。 – winterTTr
看起來這個引用更清晰,語法高亮[https://bitbucket.org/MeeGoAdmin/mozilla-central/src/ace9b0ca623c/toolkit/xre/nsWindowsDllInterceptor.h] – winterTTr