将例程的内容复制到内存中的另一个位置
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 中,如何将一张表的内容复制到同一个数据库中的另一张表中?