【发布时间】:2018-04-13 01:52:51
【问题描述】:
我想知道加载目标文件(由 msvc 编译器从单个源文件生成),将其加载到我已经运行的程序的内存中(例如在缓冲区中)然后运行代码的步骤是什么在里面。
用例是我有一个需要一分钟加载的大型程序,并且想要从源代码进行实时修改。就像只是加载目标文件,修复这个目标文件中的一些地址,使用 -hotpatch 函数拦截我已经运行的进程中的调用并重定向到我的目标文件。
在我看来,我应该只解析目标文件的导入表以指向我已经加载的程序并拦截已修改函数的调用。
我错过了什么吗?我想在尝试之前先问一下,不要把时间浪费在可能不可能的事情上!
谢谢!
【问题讨论】:
-
我的理解是对象文件是一种中间表示,不一定是可执行的。目标文件中可能包含未解析的符号,这些符号由链接器解析。您是否将目标文件与静态或动态库混淆了?
-
听起来你需要使用动态库。操作系统可以根据需要或在启动时将这些加载到您的程序中。这些库可以包含可执行代码,并且它们通常没有未解析的外部引用。
-
事实上,我想解决那些对我程序中已经加载的地址的引用。我不想重新链接整个可执行文件。而且我不想使用 LoadLibrary 函数。
-
绝对应该可以,快速谷歌搜索显示this Windows dll 示例。
-
是的,除了我想加载 .obj 文件而不是 .dll。所以也许有一些我不知道的差异?
标签: c++ visual-c++ dynamic linker loader