17

我正在使用 objdump 来分析共享对象的内存使用情况。除了 .data 和 .rodata 部分,我还看到了.data.rel.ro部分。

有谁知道这个是干什么用的?

4

1 回答 1

21

我在这里找到了答案:

gcc、GNU 链接器和 glibc 动态链接器合作实现了一个称为只读重定位或 relro 的想法。这允许链接器在应用动态重定位后将可执行文件或(更常见的)共享库的一部分指定为只读的。

这可以用于只读全局变量,这些变量被初始化为需要重定位的东西,例如函数的地址或不同的全局变量。因为全局变量需要以动态重定位的形式进行运行时初始化,所以不能放在只读段中。但是,由于它被声明为常量,因此程序不能更改它,动态链接器可以在应用动态重定位后将其标记为只读。

于 2011-08-11T19:25:02.723 回答