什么是.data.rel.ro用于?

waf*_*man 9 gcc objdump

我使用objdump来分析共享对象的内存使用情况.与.data和.rodata部分一起,我看到.data.rel.ro部分.

有谁知道这用了什么?

waf*_*man 13

我在这里找到了答案:

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

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