5

x86フックについて説明されたx86 APIフックの記事を読んでいて、次のコードに出くわしました。

if(*function_A == 0xe9) {
    printf("Hook detected in function A.\n");
}

このコードは、関数のオペコードがジャンプかどうかをテストしているようです。私の質問は構文について*function_Aです。この構文は何ですか?Cの関数のオペコードを返しますか? 多くの調査を行いましたが、この機能に関するドキュメントは見つかりませんでした

編集

記事へのリンクを追加したと思っていましたが、追加するのを忘れていたことに気付きました。役立つ場合に備えてリンクが追加されました。

4

2 に答える 2

5

いいえ、関数ポインターを逆参照して、基になるコードを取得することはできません。

これはおそらく、別のポインターを導入し、「正しいことをする」特定のプラットフォームに依存することによって行われます。ここで、「正しい」とは「やりたいこと」を意味します。

何かのようなもの:

const unsigned char *function_A = (unsigned char *) printf; /* Any function. */

これは移植性がなく、関数とデータ ポインターに互換性がないため、コンパイラの警告が生成されます。たとえば x86 では、おそらく「動作」します。

于 2013-06-10T11:42:45.377 に答える