1

関数の最初のオペコードを jmp opcode で上書きすると、実際には 5 バイト (または jmp ショートの場合は 2) が書き込まれます。しかし、変更中に別のスレッド (同じプロセスから) がこの関数を呼び出すとどうなるでしょうか? これにより、予期しない動作が発生します。しかし、説明が見つかりませんでした。フッキング用品は問題ないように無視しています。

おそらく win32api では、 mov edi,edi で nop があるという事実を使用します。しかし、私の質問はより理論的です

ありがとう

4

2 に答える 2

1

特定のプロセスに注入すると、プロセスを一時停止し、すべてのフックをインストールして、その後続行できます。

于 2013-08-27T09:29:15.900 に答える
1

問題を引き起こす可能性は十分にあります。変更するコードにクリティカル セクションを作成し、クリティカル セクションを入力して、コードの変更中に排他的アクセスを確保できます。

相互アクセスの場合、実行中のスレッドは (理論的には) 最初のバイトを見ることができ、次の 4 バイトでジャンプを実行します (長いジャンプの場合)。呼び出しの場合、ジャンプの前に次の命令 (IP) がプッシュされ、それが現在の + 5 にretなります。

これはすべて理論上の話ですが、コードを変更している間は相互アクセスを防止する必要があります。

于 2013-08-25T20:26:14.097 に答える