假设我有一个动态链接的 ELF 二进制文件,我想要重定向/替换某些库调用。我知道可以使用
我想做的是从其他对象文件中添加代码(如果需要,可能在新的部分中),并将这些对象文件的符号添加到二进制文件的符号表中,以便新添加的代码版本被用于代替共享库代码。我认为,即使它们在同一个文件中,这些代码也应该能够在运行时按照通常的 PLT 方式解析(值得一提的是,我只关心函数,不关心数据)。
请不要给我类似于“你不想这样做!”或“那不可移植!”的回答。我正在研究一种与略微不兼容的备用共享库实现进行交互的方法。涉及的平台是 i386-linux(即32位)。除非我对可能性的看法是错误的,否则我可以编写一些工具来解析 ELF 文件并执行我的黑客攻击,但我怀疑是否有一种花哨的方式可以使用 GNU 链接器和其他工具来实现这一目的,而无需编写新代码。
LD_PRELOAD
来实现,但是我希望得到一种更为永久的解决方案,独立于环境,并且适用于 setuid/setgid 二进制文件,这些都是 LD_PRELOAD
无法实现的。我想做的是从其他对象文件中添加代码(如果需要,可能在新的部分中),并将这些对象文件的符号添加到二进制文件的符号表中,以便新添加的代码版本被用于代替共享库代码。我认为,即使它们在同一个文件中,这些代码也应该能够在运行时按照通常的 PLT 方式解析(值得一提的是,我只关心函数,不关心数据)。
请不要给我类似于“你不想这样做!”或“那不可移植!”的回答。我正在研究一种与略微不兼容的备用共享库实现进行交互的方法。涉及的平台是 i386-linux(即32位)。除非我对可能性的看法是错误的,否则我可以编写一些工具来解析 ELF 文件并执行我的黑客攻击,但我怀疑是否有一种花哨的方式可以使用 GNU 链接器和其他工具来实现这一目的,而无需编写新代码。