非クラス関数の場合-迂回する関数のオフセットを次のように宣言するだけです。
typedef int (_cdecl* SomeFunc)(char* pBuffer, int size);
SomeFunc Real_SomeFunc = (SomeFunc)(0xCAFEBABE);
...
DetourAttach(&(PVOID&)Real_SomeFunc, (PVOID)Hook_SomeFunc);
さて、これはクラスのメンバー関数を迂回することで難しくなります-迂回にはこれのサンプルがあります:
https://github.com/microsoft/Detours/blob/master/samples/member/member.cpp
そのサンプルはすでにターゲットメンバー関数を定義しています-しかし、DLLを注入するバイナリimのオフセットしか知らないので、これを変換するにはどうすればよいですか?
void (CDetour::* CDetour::Real_Target)(void) =
(void (CDetour::*)(void))&CMember::Target;
このようなものに:
void (CDetour::* CDetour::Real_Target)(void) =
(void (CDetour::*)(void))0xCAFEBABE;
ここでコンパイルエラーが発生します
ヒントはありますか?