模拟动态加载程序以修复共享库偏移
Emulate dynamic loader to fixup shared library offsets
我在工作中遇到了一个有趣的情况,我正在努力找到一个好的解决方案。我们有在多核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的。点或另一个]
相关文章:
- 如果同时存在共享库和动态库,则链接器将首选哪个库?
- 如何在进入动态打开的共享库时设置断点?
- 使用CFBundleCreate在C++中的Mac上加载动态共享库(DLL)
- 如果我在 Linux 上更改C++动态共享库,而我的可执行程序在其上使用,会发生什么
- ASAN 检测与动态加载库共享的类的 vtable 的 ODR 违规
- 使用dlopen动态加载共享库
- Tensorflow:与共享库动态链接
- 动态强制转换适用于模板成员函数内的共享指针和弱指针,无需代码重复
- 当使用rpath时,C++可执行文件无法找到动态链接的共享库
- 共享_ptr的向量的C 动态降低
- 带有模板类和动态调度的C 共享_POINTER
- 在运行时动态加载共享库
- 动态加载共享的可选对象
- 在 Solaris 上创建和使用动态共享库
- 模拟动态加载程序以修复共享库偏移
- 多个动态链接库(DLL)是否可以从静态库(LIB)共享线程本地存储
- 在动态库之间共享静态库中的数据
- 动态分配的 int 数组的共享指针触发了断点
- 动态加载具有RTLD_DEEPBIND的共享库
- 使用共享动态库进行交叉编译