В рамках попытки полностью написать компилятор с нуля, я в настоящее время работаю над частью обработки файлов 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
Требуется ли это отображение для рабочего исполняемого файла? Или они могут быть полностью опущены, и у вас все еще будет действительный исполняемый файл?