0

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

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

4

1 回答 1

0

如果您阅读了Detourstrampoline实际工作原理的技术细节,您会发现您可以通过将 a作为 detours 的一部分来利用旧的例程。然后,只要您想调用旧例程,就可以调用蹦床。

于 2012-02-15T20:56:41.080 回答