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

时间:2017-10-31 19:23:24

标签: c++ visual-c++ dynamic linker loader

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

至于(我可以想到的)您的预期用途:动态加载和执行obj文件不会让您更接近在已经运行的进程中拦截调用。你想要的可能是 挂钩 。有很多方法(不,严肃地说,很多)。 Detours或多或少是实现这一目标的官方方式,这里有一些presentation来自异域的一些方面。