【发布时间】:2020-08-31 14:29:14
【问题描述】:
我们知道.rel.text 和.rel.data 部分包含重定位条目,链接器需要重定位这些条目才能生成最终的可执行文件。
我的问题是,为什么要区分 .rel.text 和 .rel.data 部分?我们可以将.rel.text 和.rel.data 部分合并为一个部分(例如.rel)不是更简洁吗?我们只需要在重定位条目结构(Elf64_Rela)中添加一个位来指示重定位条目是与函数(.text)还是全局变量(.data)相关?
【问题讨论】:
-
重定位条目并没有真正可以窃取的空闲位,但是为什么您仍然需要 O(n) 额外存储而不是 O(1)?
-
因为 .text 是只读的,而 .data 是读/写的,所以您需要将它们分开,以便它们可以正确链接。是的,在某些情况下,它们可以简单地进入相同的内存空间,但为什么要从程序员手中夺走控制权呢?
-
@old_timer:这不是文本/数据部分本身,只是为它们保存重定位的部分。
-
通常可以为 .data 和 .text 和 .bss 提出相同的论点
-
你需要知道它们的区别,这样你才能加载/放置/链接/等它们。