Как процесс создается из файла ELF?

Кто-нибудь может поделиться какой-нибудь ссылкой или книгой, которая подробно объясняет, как процесс создается из файла ELF. Кажется, что большинство свободно доступных материалов являются абстрактными без объяснения большинства деталей, таких как то, какая информация берется из заголовков программы и как образ процесса находится в памяти, используя эту информацию. Спасибо

1 ответ

Эльфийские файлы работают следующим образом. Каждый сегмент описывает группу разделов, совместно использующих одни и те же характеристики, таких как "Загрузка в память", каждый раздел имеет свое разрешение, такое как чтение, запись или выполнение, что в основном происходит, так как каждый сегмент имеет некоторый заголовок (phdr) этот заголовок содержит виртуальный адрес, который этот сегмент должен быть загружен в память, его размер и смещение к фактическим двоичным данным в ELF, то же самое относится и к разделам, каждый раздел имеет некоторый виртуальный адрес, на который он будет загружен, смещение размера к двоичному данные в файле, также разрешения для оперативной памяти (запись / чтение / выполнение), теперь то, что операционная система делает для создания процесса из образа файла, читает и анализирует все разделы, загружает их двоичные данные в память, если существует флаг загрузки и дать этому разделу памяти соответствующие разрешения. Примером двоичных данных являются машинные инструкции - фактический код, например .text раздел обычно содержит двоичные инструкции (код). Другим хорошим примером для раздела является.data, который будет содержать глобальные переменные какого-либо процесса и должен иметь только разрешения на чтение и запись, также общие заголовки эльфов содержат нечто, называемое точкой входа - виртуальный адрес первой команды, которая должна быть выполнена (учитывая, что раздел, содержащий машинный код, был успешно загружен по виртуальному адресу, который был ему предоставлен)

Файл elf намного сложнее, но в целом это то, что он содержит, он содержит данные, которые полезны для компоновщиков и динамических компоновщиков, таких как таблицы перемещения и символов, но в основном это то, что происходит при загрузке файла elf, вот некоторая хорошая ссылка на узнать больше об этом предмете: http://flint.cs.yale.edu/cs422/doc/ELF_Format.pdf

Также, если вы используете какую-то систему на основе Linux, попробуйте поиграть с readelf а также objdumpлично мне это помогло многому научиться

Другие вопросы по тегам