2012-02-15 16 views
0

メモリ内のルーチンコードを別の場所にコピーしたい。例えば、ルーチンの内容をメモリ内の別の場所にコピーする

procedure OldShowMessage; 
begin 
    ShowMessage('Old message..'); 
end; 

私はメモリ内の別の場所にルーチンをコピーしたいと言います。私はいくつかの擬似コードは、私はこれを行うのいずれかの可能性があるかどうかを知りたい

// VirtualProtect(@OldShowMessage, <length of routine>, ..., ...); 
// Allocate memory 
// lopShowMessage := AllocMem(<length of routine>); 
// Move(@OldMessage, Pointer(lopShowMessage)^, <length of routine>); 
// FlushInstructioncache..... 

ようになる

var 
    lopShowMessage : procedure; // procedural pointer. 

のようなものを宣言しました。私は新しいルーチンを呼び出すルーチンをパッチしましたが、コードの迂回路を使用してJMP命令を配置するので、古いルーチンで提供されている機能を使用できない場合があります。

私の前の質問に対する基準は、あなたがDetoursが実際にどのように動作するかの技術的な詳細にまで読めば、あなたはの一部としてtrampolineを利用することにより、古いルーチンを利用することができていることがわかりますhere

答えて

0

であるあなた迂回。古いルーチンを呼び出すときはいつでも、トランポリンを呼び出すことができます。

+0

なぜこれがダウンリストされましたか?それは有効な答えです。 –

関連する問題