2 つの FARPROC があり、ASM を使用して一方のアドレスを他方のアドレスに置き換えたいと考えています。
FARPROCとは何ですか? "[int (FAR WINAPI * FARPROC) () ] C では、FARPROC 宣言は、指定されていないパラメーター リストを持つコールバック関数を示します。ただし、C++ では、宣言内の空のパラメーター リストは、関数にパラメーターがないことを示します。この微妙な違いにより、不注意なコードが破損する可能性があります。以下は、この状況を処理する 1 つの方法です:"
それがカバーされたので、これは私のコードです:
HMODULE h = LoadLibrary("myDLL.dll");
FARPROC p = GetProcAddress(h, "_GetHelloMessage@0");
if(!p) MessageBox(hwnd, "injected, but function not found", "Loader", NULL);
HMODULE dllHmodule = GetModuleHandle("InjectFunctions.dll");
FARPROC injproc = GetProcAddress(dllHmodule, "_GetHelloMessage@0");
if(!injproc) MessageBox(hwnd, "injproc is null", "Loader", NULL);
__asm{
mov eax, p
ADD injproc [EAX],8
}
私の質問は、この DLL をロードしたプログラムが p を呼び出すたびに、代わりに injproc を呼び出すようにする方法です。