0

バイナリ実行可能ファイルのメンバー関数を迂回しようとしています。関数のシグネチャとメソッドの VA しか知りません。Detours Express 3.0 に含まれている「メソッド」サンプルの助けを借りて、次のことを思いつきました。

class Detour
{
public:
    void mine_target(const char* text)
    {
        printf("text = %s\n", text);
        (this->*real_target)(text);
    }

    static void (Detour::*real_target)(const char* text);
};

void (Detour::*real_target)(const char* text) 
    = (void (Detour::*)(const char*))0x401010;

エラーが表示されます:

error C2440: 'type cast' : cannot convert from 'int' to 'void (__thiscall Detour:: *)(const char *)'
             There are no conversions from integral values to pointer-to-member values
4

1 に答える 1

1

関数を傍受/フックする手法は、メンバーへのポインターでは機能しません。コンパイラとクラスの設計 (継承構造) によっては、そのようなポインターのクラス データを表すために追加のバイト数が必要になります。これは、自由な関数ポインターでは必要ありません。

于 2013-05-23T15:23:45.410 に答える