动态加载要执行的对象文件
Dynamic load of object file to execute
我想知道加载目标文件(由 msvc 编译器从单个源文件生成)、将其加载到已经运行的程序的内存中(例如在缓冲区中)然后在其中运行代码的步骤是什么。
用例是我有一个大型程序,需要一分钟才能加载,并希望从源代码进行实时修改。就像加载目标文件一样,修复此对象文件中的一些地址,使用 -hotpatch 函数拦截我已经运行的进程中的调用并重定向到我的目标文件。
在我看来,我应该只解析目标文件的导入表以指向我已经加载的程序并拦截已修改的函数的调用。
我错过了什么吗?在尝试之前,我想问一下不要在可能不可能的事情上浪费时间!
谢谢!
回答直接问题(关于加载和执行 obj 文件):这实质上相当于重写链接器。这几乎是不可能的。
至于(我能弄清楚的)你的预期用途:动态加载和执行 obj 文件不会让你更接近拦截已经在运行的进程中的调用。你想要的可能是钩子。有很多(不,说真的,很多)方法可以做到这一点。绕道是实现这一目标的或多或少的官方方式,以下是来自异国情调的几种方法的介绍。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- 检测 COFF 对象文件中C++内联符号
- 特定对象文件的单线程生成
- 使用对象文件读取三角形数据网格
- 链接时,不同静态库中的同一对象文件
- 防止临时对象文件访问 MSVC 中的磁盘
- 对在不同二进制文件中创建的对象文件的依赖关系
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 使用 make 将对象文件放在特定目录中
- 如何从 3d 对象文件中获取 3d 坐标
- 为什么我的生成文件没有生成对象文件?
- 如何在OSX上正确创建C++对象文件(.o)
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 使用nvcc(CUDA-RINSIDE)正确链接对象文件
- 链接节点本机模块中的提升库,对象文件需要替代库版本