👁🗨Hello world~
Разбор ELF: Формат объектных файлов под микроскопом
• Я уже писал про ELF файлы, но тогда у меня была цель просто рассказать про них то, с чем вы будете сталкиваться чаще всего. Сегодня же я хочу разобрать эту тему более досконально. Информацию брал отсюда.
• И так при сборке программ на C, C++ или даже ассемблере, результатом компиляции становятся объектные файлы. Это промежуточные бинарные файлы, используемые компоновщиком (linker) для создания исполняемого приложения или разделяемой библиотеки, существует их три основных типа:
• Перемещаемый файл (relocatable file) содержит код и данные, предназначенные для дальнейшей компоновки. Используется как часть проекта, а не запускается напрямую.
• Исполняемый файл (executable file) содержит программу, пригодную для выполнения.
• Разделяемый объектный файл (shared object file) содержит код и данные, пригодные для компоновки в двух контекстах. Во-первых, редактор связей может обрабатывать его совместно с другими перемещаемыми и разделяемыми объектными файлами для создания другого объектного файла. Во-вторых, динамический компоновщик объединяет его с исполняемым файлом и другими разделяемыми объектами для создания образа процесса.
• Все эти типы файлов используют формат ELF, стандартный для Unix систем, включая Linux. Он универсален, поддерживает компоновку и запуск, и одинаково подходит как для приложений, так и для библиотек.
• Структура ELF-файла (подробнее на изображении):
• Заголовок ELF: всегда в начале файла. Содержит "дорожную карту" файла.
• Секции (Sections): основная информация, код, данные, таблицы символов, информация о переадресации и т. д.
• Таблица заголовков секций: содержит сведения о каждой секции (имя, размер, смещение и т. д.).
• Таблица заголовков программы (Program Headers): нужна для создания образа процесса при запуске.
• Файлы, используемые только при сборке, могут не содержать заголовки программы. А исполняемые файлы, наоборот, могут обойтись без таблицы секций.
• Порядок секций и заголовков внутри ELF-файла может быть произвольным, кроме ELF-заголовка, который всегда находится в начале.
• Формат ELF был создан для того, чтобы быть удобным как для линкера, так и для загрузчика (loader).
• В следующих постах узнаем про представление данных и представление символов. Удачи!
• Поддержать автора монеткой: @v_meshke
Post #575
4.15K

- ❤ 10
- 👍 2
- 🔥 2
- ☃ 1