c++ - 要执行的目标文件的动态加载

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

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

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

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

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

谢谢 !

最佳答案

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

至于(我能弄清楚)您的预期用途:动态加载和执行 obj 文件不会让您更接近拦截已经运行的进程中的调用。你想要的大概是 Hook .有很多(不,说真的,很多)方法可以做到这一点。 Detours或多或少的官方方式来实现这一点,这里是 presentation从光谱的异国情调方面的几种方式。

关于c++ - 要执行的目标文件的动态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043130/

相关文章:

c++ - 在 Windows 上使用 clang 编译 CUDA 时的重新定义

c++ - 调试器不显示 Xcode 5.0.2 中的浮点值

c++ - 在 msvc Debug模式下,堆栈中有 cdcdcdcd 是否正常

c++ - C++中的基本问题

c++ - 通过 std::thread 传递右值

dynamic - 出于好奇而学习的动态语言

c++ - 如何使用模板编程创建多类型数组

c++ - std::shared_ptr 和 std::unique_ptr 构造函数之间的不对称性

java - 最长递增子序列。错误在哪里?

java - 如何在Eclipse中安装Web动态模块?