模拟动态加载程序以修复共享库偏移

Emulate dynamic loader to fixup shared library offsets

本文关键字:共享 动态 加载 程序 模拟      更新时间:2023-10-16

我在工作中遇到了一个有趣的情况,我正在努力找到一个好的解决方案。我们有在多核MIPS裸机(无内核)上运行的代码。我们需要与一些需要升级的第三方代码集成。我正在考虑将第三方代码编译为 PIC,然后在下载此代码时更改代码/数据符号的 GOT(我可以控制代码的驻留位置)。此外,假设第三方代码的接口不会更改,因此没有新的 PLT/GOT 条目。这行得通吗?我还应该考虑哪些其他事情?

正确答案是否比"嵌入动态链接器/加载器"长?您的问题似乎与 ld.so 等人解决的问题相同。描述动态链接器/加载器必须考虑的所有事情是John Levine的Linkers and Loaders等书籍的主题。

Linux/Unix binutils objcopy是你想要的吗?假设您正在一次构建所有二进制文件,而不是实际上希望在运行时以随机顺序动态加载它们[并且您没有足够的内存将它们分布在该内存中],那么我认为这将起作用。

当然,如果你只需要修复 GOT,那么我不明白为什么你不能这样做 - 写一些东西并不是那么困难的任务。但是objcopy已经写好了,可以做相当多的二进制/可执行"搞砸"(我已经用它来制作各种系统的引导ROM,包括PC的BIOS rom等)[不是我想出了这个主意,更像是我拿走了某人的makefile,里面恰好有objcopy-我只是看了一下它做了什么,以了解当出现问题时它是如何制作rom的。点或另一个]