Для чего используется .data.rel.ro? - PullRequest
9 голосов
/ 11 августа 2011

Я использую objdump для анализа использования памяти общим объектом. Наряду с разделами .data и .rodata я вижу раздел .data.rel.ro .

Кто-нибудь знает, для чего это используется?

1 Ответ

13 голосов
/ 11 августа 2011

Я нашел ответ здесь :

gcc, компоновщик GNU и динамический компоновщик glibc взаимодействуют для реализации идеи, называемой перемещением только для чтения или relro.Это позволяет компоновщику назначать часть исполняемого файла или (чаще) разделяемой библиотеки только для чтения после применения динамических перемещений.

Это может использоваться для глобальных переменных только для чтения, которые инициализируютсяк чему-то, что требует перемещения, например, к адресу функции или другой глобальной переменной.Поскольку глобальная переменная требует инициализации во время выполнения в форме динамического перемещения, ее нельзя поместить в сегмент только для чтения.Однако, поскольку он объявлен как постоянный и, следовательно, не может быть изменен программой, динамический компоновщик может пометить его как доступный только для чтения после применения динамического перемещения.

...