将例程的内容复制到内存中的另一个位置

时间:2012-02-15 09:14:26

标签: delphi function-pointers monkeypatching delphi-6 detours

我想将内存中的例程代码复制到另一个位置。例如,

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

假设我想将例程复制到内存中的另一个位置。我已宣布类似

的内容
var
  lopShowMessage : procedure; // procedural pointer.

一些伪代码就像

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

我只想知道是否有可能这样做。我修补了一个例程来调用一个新例程,但由于我们使用代码绕道放置一个JMP指令,我可能无法使用旧例程中提供的功能。

我之前提问的参考资料是here

1 个答案:

答案 0 :(得分:0)

如果您阅读了Detours实际工作方式的技术细节,您会发现在绕行时可以使用trampoline来利用旧例程。然后,只要您想调用旧例程,就可以调用蹦床。