Какие части исполняемого файла ELF загружаются в память, и где?

Исторически, было много несовместимых расширений оригинала mail commnad. Mail прибыл из BSD и взял имя Mail вместо mail потому что это было поставлено вместе с несовместимым mail программа. Позже та же история произошла с mailx. Для получения дополнительной информации считайте рецензию проекта Семейной реликвии на различных версиях mail. Дистрибутивы Linux по-разному обеспечили один или несколько почтовых утилит под различными именами.

Для мобильности, даже между установками того же дистрибутива Linux иногда, Вы не можете полагаться mail. mailx команда стандартизирована (не со всеми опциями, которые могли бы существовать в конкретной системе).

Если Вы хотите утилиту, которая всегда ведет себя таким же образом, если она присутствует, и Вы не возражаете против этого, она часто не устанавливается по умолчанию, можно использовать mutt.

10
29.03.2013, 14:55
1 ответ

Следующее является действительно хорошей ссылкой: http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/. Это содержит библиографию в конце множества различных ссылок на разных уровнях. Если Вы хотите знать каждую окровавленную деталь, можно перейти прямо к источнику: http://www.akkadia.org/drepper/dsohowto.pdf. (Ulrich Drepper записал Linux динамического компоновщика.)

Можно получить действительно хороший обзор всех разделов в исполняемом файле путем выполнения команды как "objdump-h myexe" или "readelf-S myexe".

Раздел .interp содержит название динамического загрузчика, который будет использоваться для динамичного соединения символов в этом объекте. Раздел .dynamic является дистилляцией заголовка программы, который отформатирован, чтобы быть легким для динамического загрузчика читать. (Таким образом, это имеет указатели на все другие разделы.)

.got (Глобальная Таблица Смещения) и .plt (Таблица Связи Процедуры) являются двумя основными структурами, которыми управляет динамический компоновщик. .got является косвенной таблицей для переменных, и .plt является косвенной таблицей для функций. Каждый исполняемый файл или библиотека (которые называют "общими объектами") имеют свой собственный .got и .plt, и это таблицы символов, на которые ссылается тот общий объект, которые на самом деле содержатся в некотором другом общем объекте.

.dynsyn содержит всю информацию о символах в Вашем общем объекте (и те Вы определяете и внешние, на которые необходимо сослаться.) .dynsyn не содержит имена действительного символа. Они содержатся в .dynstr, и .dynsyn имеет указатели в .dynstr. .gnu.hash является хеш-таблицей, используемой для быстрого поиска символов по имени. Это также содержит только указатели (указатели в .dynstr и указатели, используемые для того, чтобы сделать цепочки блока.)

Когда Ваш общий объект разыменовывает некоторый символ "нечто", динамический компоновщик должен пойти посмотреть "нечто" во всех динамических объектах, против которых Вы связаны выяснить, какой содержит "нечто", которое Вы ищете (и затем что относительный адрес "нечто" в том общем объекте.) Динамический компоновщик делает это путем поиска .gnu.hash раздела всех связанных общих объектов (или .hash разделяют для старых общих объектов, которые не имеют раздела .gnu.hash.), После того как это находит корректный адрес в связанном общем объекте, это помещает его в .got или .plt Вашего общего объекта.

12
27.01.2020, 20:02
  • 1
    Спасибо, Ваши ссылки берут меня шаг вперед в обнаружении виртуальных отображений разделов, в которых я нуждаюсь. Поскольку мой интерес к этому является судебным, "загруженный в DRAM" все еще относится ко мне. Если раздел будет отображен, но никогда не загружаться, то я не смогу найти его в дампе памяти :) –  Dutchy 29.03.2013, 18:07
  • 2
    Вы правы. Когда Вы сделаете дамп памяти, Вы получите копию каждой отображенной страницы, таким образом, мое различие между "отображенным в vm" и "загруженный в DRAM" было не важно. Я удалил то предложение, и ответ улучшен.Спасибо! –  Wandering Logic 30.03.2013, 15:46
  • 3
    Отмеченный Ваш ответ как ответ, потому что это - столько информации, сколько я собираюсь добраться :) должен будет сделать остальных сам, это - мое исследование, в конце концов. –  Dutchy 02.04.2013, 13:35
  • 4
    Так, да .dynsym и и .dynstr (и другие) используются динамическим компоновщиком и загружаются в памяти программ (в сегменте текста) и могли использоваться во времени выполнения Вашей программой. –  ysdx 03.09.2015, 00:37

Теги

Похожие вопросы