2

非クラス関数の場合-迂回する関数のオフセットを次のように宣言するだけです。

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;

ここでコンパイルエラーが発生します

ヒントはありますか?

4

1 に答える 1