我在工作中有一个有趣的情况,我正在努力寻找一个好的解决方案。我们有在多核 MIPS 裸机(无内核)上运行的代码。我们需要与一些需要升级的第 3 方代码集成。我正在考虑将第 3 方代码编译为 PIC,然后在下载此代码时更改代码/数据符号的 GOT(我可以控制代码所在的位置)。此外,假设第 3 方代码的接口没有改变,因此没有新的 PLT/GOT 条目。这会工作吗?我还应该考虑哪些其他事情?
2 回答
Is the correct answer longer than "embed a dynamic linker/loader"? Your problem seems the same as that solved by ld.so and the likes. Describing all the things which a dynamic linker/loader must consider is the topic of books such as Linkers and Loaders by John Levine.
Linux/Unix binutilsobjcopy
会是您正在寻找的吗?假设您正在一次构建所有二进制文件,而不是实际上想要在运行时以随机顺序动态加载它们[并且您没有足够的内存将它们分散到该内存中],那么我认为这会起作用。
当然,如果您只需要修复 GOT,那么我不明白您为什么不能这样做 - 写一些东西并没有那么困难。但是 objcopy 已经写好了,并且可以做相当多的二进制/可执行“搞砸”(我已经用它为各种系统制作引导 rom,包括用于 PC 的 BIOS rom 等)[不是我想出来的有了这个想法,更像是我拿了某人的makefile,其中恰好有objcopy - 我只是看看它做了什么来了解它是如何在某个时候出现问题时制作rom的]