2009-07-09 9 views
1

この1つの試合は、我々のスクリプトは、我々は(創造という名前の「scripts.dll」主のdllを編集せずに別のDLL内の関数を上書き

このscripts.dll、サーバ側の書き込みした主なDLLを使用しています、負荷他のプラグイン(同様の.dll)

質問:。私はscripts.dllの1がないところに例えば、pluginA.dll、中scripts.dll内の既存の関数をオーバーライドする必要があります

私は多分追加をつかむという考えがありましたscripts.dllの中の1つのressを削除し、新しい関数のアドレスを(memcpy()?)で上書きします。

ああ、機能の名前は同じです。

答えて

1

まず、特定の関数ポインタをpluginA.dllから取得し、scripts.dllからGetProcAddressを取得するように呼び出し元を調整しようとします。

これが実現できない場合は、古い関数の先頭を新しい関数へのジャンプ命令で上書きします。 x86上のジャンプ命令は "E9 XX XX XX XX"です。ターゲットアドレスはジャンプ後のPCに関連していることに注意してください。あなたがx86を持っていないなら、マシンコードは異なって見えるでしょう。

2

これはかなり長い話題ですが、長年の回答が必要ですが、ありがたいことに、別の場所で詳しく説明されています。 This CodeProject articleは非常にうまく話題になっています。これは理論と、便利なMicrosoft Detoursライブラリの使い方を簡単に説明しています。

+0

ありがとう、これは私を助けるはずです。 :) – Zack

関連する問題