Что представляет собой SEGMENT_START («текстовый сегмент», 0x400000)? - PullRequest
3 голосов
/ 21 марта 2019

Я изучаю расположение исполняемых файлов. Моя конечная цель - проанализировать конкретный исполняемый файл на предмет того, что можно реорганизовать (в его источнике), чтобы уменьшить размер скомпилированного вывода.

Я использовал https://www.embeddedrelated.com/showarticle/900.php и https://www.geeksforgeeks.org/memory-layout-of-c-program/ в качестве ссылок для этого начального обучения.

Из того, что я узнал, скрипт компоновщика определяет адреса, где размещаются разделы скомпилированных двоичных файлов. Э.Г.

> ld --verbose | grep text
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x400000)); . = SEGMENT_START("text-segment", 0x400000) + SIZEOF_HEADERS;
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)

Я думаю, это означает, что text сегменты скомпилированных двоичных файлов начинаются с адреса памяти 0x400000 - true?

Что означает это значение, 0x400000? Возможно, я что-то не правильно понимаю, но, конечно же, 0x400000 не представляет физическую ячейку памяти, не так ли? Например. если бы я запускал два экземпляра моего скомпилированного a.out параллельно, они не могли бы оба одновременно занимать пространство на 0x400000, верно?

1 Ответ

4 голосов
/ 21 марта 2019

0x4000000 - это не физический адрес в том смысле, в каком его видят ваши микросхемы памяти.Это виртуальный адрес , как видно с точки зрения процессора.

Загрузчик вашей программы сопоставит несколько страниц физической памяти с VA 0x400000 и скопирует на нее содержимое text-segment.И да, другой экземпляр вашей программы может занимать один и тот же физический и виртуальный блок памяти для text-segment, потому что текст (код) доступен для чтения и выполнения, но не для записи .Другие сегменты (data, bss, stack, heap) могут иметь идентичные VA, но каждый из них будет сопоставлен с их частным защищенным физическим блоком памяти.

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