【发布时间】:2020-02-19 16:19:37
【问题描述】:
我在 Linux 上有一个动态链接的 ELF 可执行文件,我想交换它链接的库中的一个函数。当然,使用 LD_PRELOAD 我可以提供一个小型库来替代我自己编译的函数。但是,如果在替换中我想调用原始库函数怎么办?例如,函数可能是 srand(),我想用我自己的种子选择劫持它,否则让 srand() 做它通常做的事情。
如果我要链接以使所说的可执行文件,我会使用链接器的 wrap 选项,但这里我只有编译的二进制文件。
我看到的一个简单的解决方案是将原始库函数的源代码剪切并粘贴到替换中 - 但我想在源不可用时处理更一般的情况。或者,我可以将所需的额外代码十六进制编辑到二进制文件中,但这是特定于二进制文件的,而且也很耗时。有没有比这两个更优雅的东西?比如加载器的一些魔法?
(抱歉,如果我没有准确使用术语......)
【问题讨论】:
标签: shared-libraries elf ld-preload