【发布时间】:2023-03-30 18:40:01
【问题描述】:
全局偏移表 (GOT):用于 ELF 符号的重定位(实施 GCC),它有助于共享相同的二进制文件,而无需为每个进程进行任何特定链接。从而减少内存中相同二进制图像的副本。
我的问题是,有没有办法在可重定位的 ELF 映像中禁用 R_386_GOT32,R_386_GOTOFF 类型的重定位条目?我的意思是,我可以强制 GCC 使用 R_386_PC32 或 R_386_32 类型重定位而不是 GOT 类型重定位吗?
如果没有,你能解释一下 GOT 的实现方式吗?我正在为 ELF 编写一个动态链接和加载库。
编辑:
参考链接
https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-74186.html
http://man7.org/linux/man-pages/man8/ld.so.8.html
http://wiki.osdev.org/ELF
【问题讨论】:
-
这是一个有效的问题。但是,如果您正在编写自己的动态链接器,则最好阅读整个 ELF 规范并实现正确的 GOT 重定位。
-
@KemyLand 我同意,但是由于时间限制,现在我想做一个有限的实现。
-
整洁,这正是我的玩具操作系统所需要的
-
@minexew 我把它开源了。您可以从这里查看 ELF 加载的完整源代码 github.com/amaneureka/AtomOS/blob/master/src/Kernel/…
标签: gcc operating-system elf relocation