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

Posted

技术标签:

【中文标题】将例程的内容复制到内存中的另一个位置【英文标题】:Copy contents of a routine to another location in memory 【发布时间】:2012-02-15 09:14:26 【问题描述】:

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

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】:

如果您阅读了有关 Detours 实际工作原理的技术细节,您会发现您可以通过使用 trampoline 作为绕道的一部分来利用旧例程。然后,您可以在想要调用旧例程时调用蹦床。

【讨论】:

以上是关于将例程的内容复制到内存中的另一个位置的主要内容,如果未能解决你的问题,请参考以下文章

如何并行化将矩阵的行随机复制到内存中的另一个矩阵的过程? [复制]

如何将一个文件夹内容复制到 Nant 脚本中的另一个文件夹?

如何将 NSMutableArray 的内容复制到 iPhone 应用程序中的另一个 NStArray?

在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?

在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?

在 MySQL 中,如何将一张表的内容复制到同一个数据库中的另一张表中?