В чем причина определения данных только для чтения в разделе .text? - PullRequest
0 голосов
/ 26 июня 2018

Я изучаю ассемблерное и низкоуровневое программирование и читаю книгу об этом . Там сказано, что мы можем поместить любые данные в секцию .text файла elf , но, конечно, мы не можем изменить их из-за различных разрешений страниц / сегментов. Но там не было сказано, с чем это связано, из-за наличия данных в разделе .text . Мне также сказали многие программисты на С ++, что компилятор g ++ помещает

static const char DATA[] = "SOME DATA";

внутри раздела .text тоже. Интересно, почему бы не поместить эти данные в раздел .rodata , для чего это нужно? И если используется .text , что хранить в .rodata тогда?

Основной вопрос касается такого поведения в длинном режиме.

1 Ответ

0 голосов
/ 26 июня 2018

Традиционно данные только для чтения помещались в текстовый раздел по двум причинам:

  • текстовый раздел недоступен для записи, поэтому защита памяти может отлавливать случайные записи в данные только для чтения и приводить к аварийному завершению вашей программы
  • с блоком управления памятью (MMU) несколько экземпляров одного и того же процесса могут совместно использовать одну копию текстового раздела (поскольку гарантированно будет одинаковым во всех экземплярах программы), экономя память

Для целей ELF эта схема была немного изменена. Данные только для чтения теперь помещаются в новый раздел .rodata, который похож на раздел .text, за исключением того, что он также не может быть выполнен, предотвращая определенные векторы атаки. Преимущества остаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...