要执行的目标文件的动态加载
Dynamic load of object file to execute
我想知道加载目标文件(由 msvc 编译器从单个源文件生成)的步骤是什么,将它加载到我的程序内存中已经 运行ning(在缓冲区中示例)然后 运行 里面的代码。
用例是我有一个大型程序,需要一分钟才能加载,并且想从源代码进行实时修改。就像加载目标文件一样,修复这个目标文件中的一些地址,使用 -hotpatch 函数拦截我已经 运行ning 进程中的调用并重定向到我的目标文件。
在我看来,我应该只解析目标文件的导入 table 以指向我已经加载的程序并拦截已修改函数的调用。
我是不是漏掉了什么?在尝试之前我想问一下,不要把时间浪费在不可能的事情上!
谢谢!
回答直接问题(关于加载和执行 obj 文件):这实质上相当于重写链接器。这几乎是不可能的。
至于(我能弄清楚的)你的预期用途:动态加载和执行 obj 文件不会让你更接近于在你已经 运行 的进程中拦截调用。你要的大概是hooking。有很多(不,说真的,很多)方法可以做到这一点。 Detours is the more-or-less official way to achieve this, here's a presentation 异国情调的几种方式。
我想知道加载目标文件(由 msvc 编译器从单个源文件生成)的步骤是什么,将它加载到我的程序内存中已经 运行ning(在缓冲区中示例)然后 运行 里面的代码。
用例是我有一个大型程序,需要一分钟才能加载,并且想从源代码进行实时修改。就像加载目标文件一样,修复这个目标文件中的一些地址,使用 -hotpatch 函数拦截我已经 运行ning 进程中的调用并重定向到我的目标文件。
在我看来,我应该只解析目标文件的导入 table 以指向我已经加载的程序并拦截已修改函数的调用。
我是不是漏掉了什么?在尝试之前我想问一下,不要把时间浪费在不可能的事情上!
谢谢!
回答直接问题(关于加载和执行 obj 文件):这实质上相当于重写链接器。这几乎是不可能的。
至于(我能弄清楚的)你的预期用途:动态加载和执行 obj 文件不会让你更接近于在你已经 运行 的进程中拦截调用。你要的大概是hooking。有很多(不,说真的,很多)方法可以做到这一点。 Detours is the more-or-less official way to achieve this, here's a presentation 异国情调的几种方式。