Спецификация ELF http://www.skyfree.org/linux/references/ELF_Format.pdf на стр. 2-3 гласит запись заголовка программы с p_type = PT_INTERP, что она должна предшествовать любой загружаемой записи сегмента .
Я хотел бы знать, относится ли это правило к
1) порядку этой записи в таблице заголовков программы,
или 2) позиции необработанного содержимого (строка с путем фактическому интерпретатору) в макете файла
или 3) оба.
GNU linker ld , кажется, следует 3). Заголовок программы, создаваемый ld , генерирует PT_PHDR, затем PT_INTERP, затем PT_LOAD, и фактическая строка интерпретатора генерируется сразу после заголовка программы, перед любым кодом и содержимым данных. Он также (излишне?) Создает специальную запись раздела .interp в заголовках разделов с sh_type = SHT_PROGBITS, которая дублирует запись заголовка программы PT_INTERP.
В моем компоновщике я хотел бы объединить строку пути INTERP с содержимым .strtab и .shstrtab где-то ближе к концу файла, потому что все эти три раздела выровнены по байтам, что избавит от необходимости выравнивания и уменьшит размер выходного файла. Тем не менее, я не уверен, не нарушает ли это спецификацию ELF, так как я asp.