В рамках попытки написать компилятор полностью с нуля, я сейчас работаю над частью обработки файлов ELF.
После беглого просмотра нескольких статей и спецификаций о них я все еще не совсем понимаю, где хранятся сопоставления разделов на сегменты. Наблюдая за небольшими исполняемыми файлами, сгенерированными NASM + ld, я вижу, что секция .text каким-то образом отображается на заголовок программы типа LOAD, но как?
Небольшой фрагмент вывода readelf, когда в качестве входных данных используется небольшой (рабочий) исполняемый файл:
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x0000000000000084 0x0000000000000084 R E 200000
Section to Segment mapping:
Segment Sections...
00 .text
Требуется ли это сопоставление для рабочего исполняемого файла? Или их можно полностью опустить, и у вас все равно останется действующий исполняемый файл?