(此问题与如何向现有二进制可执行文件添加功能有关?)。
我也想向现有应用程序添加功能,但我不想修改原始二进制文件。
我想,对于一些“表现良好”的编译代码,应该可以创建一个“包装器”程序:
- 将原始二进制文件的段映射到它自己的内存空间;和
- 在相关地址放置自己重新定义的函数。
例如,假设加载原始二进制文件将放置void origfunction(int, int)在 location 0x1234; 我的想法是加载包装器可能会导致该函数的机器代码(来自原始二进制文件)被加载到 at0x5678并在其位置void newfunction(int, int)加载0x1234。 newfunction然后可以origfunction在执行修改之前/之后调用。
这种方法可行吗?如果没有,为什么不呢?
如果可行,是否有任何工具可以帮助自动生成此类包装程序?通用答案对未来的读者最有用,但我现在使用的原始二进制文件是一个相当典型的 OS X 二进制文件(Mach-O 格式,从 Objective-C 编译)。