动态加载要执行的对象文件

Dynamic load of object file to execute

本文关键字:对象 文件 执行 加载 动态      更新时间:2023-10-16

我想知道加载目标文件(由 msvc 编译器从单个源文件生成)、将其加载到已经运行的程序的内存中(例如在缓冲区中)然后在其中运行代码的步骤是什么。

用例是我有一个大型程序,需要一分钟才能加载,并希望从源代码进行实时修改。就像加载目标文件一样,修复此对象文件中的一些地址,使用 -hotpatch 函数拦截我已经运行的进程中的调用并重定向到我的目标文件。

在我看来,我应该只解析目标文件的导入表以指向我已经加载的程序并拦截已修改的函数的调用。

我错过了什么吗?在尝试之前,我想问一下不要在可能不可能的事情上浪费时间!

谢谢!

回答直接问题(关于加载和执行 obj 文件):这实质上相当于重写链接器。这几乎是不可能的。

至于(我能弄清楚的)你的预期用途:动态加载和执行 obj 文件不会让你更接近拦截已经在运行的进程中的调用。你想要的可能是钩子。有很多(不,说真的,很多)方法可以做到这一点。绕道是实现这一目标的或多或少的官方方式,以下是来自异国情调的几种方法的介绍。