我使用objdump来分析共享对象的内存使用情况。除了.data和.rodata部分,我还看到了 .data.rel.ro 部分。
任何人都知道这是用来做什么的?
答案 0 :(得分:12)
我找到了答案here:
gcc,GNU链接器和glibc动态链接器合作 实现一个名为只读重定位或relro的想法。这允许 链接器指定可执行文件的一部分或(更常见)a 共享库在动态重定位后是只读的 应用
这可以用于初始化的只读全局变量 需要重新安置的东西,例如a的地址 函数或不同的全局变量。因为全局变量 需要以动态重定位的形式进行运行时初始化, 它不能放在只读段中。但是,因为它是 声明是不变的,因此可能不会被改变 程序,动态链接器可以在动态后将其标记为只读 搬迁已经实施。