Почему readelf показывает «System V» как мою ОС вместо Linux?

10

Я скомпилировал небольшую программу на C (2 строки кода) с помощью gcc, чтобы попытаться понять формат файла ELF. Делая readelf -hна объектный файл, я в шапке:

OS/ABI:                            UNIX - System V 

Я использую Fedora, так почему же это не Linux?

Редактировать : я скомпилировал

int main(){
  int x = 0;
  x++;
}

с gcc -o main.o -c main.c. Моя версия gcc

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 
alex_reader
источник
Пожалуйста, покажите нам i) код, который вы скомпилировали ii) вывод gcc --versionи iii) точную команду, которую вы использовали для его компиляции.
Тердон
Я отредактировал вопрос соответственно.
alex_reader
Я только что сделал readelf -h /bin/lsна Debian GNU / Linux. Это также показало OS/ABI: UNIX - System V. Я предполагаю, что ABI используется более чем в одном ядре, а не только в Linux. Я также знаю, что Linux поддерживает более одного ABI.
Ctrl-Alt-Delor
6
Википедия говорит, что [поле OSABI в заголовке ELF] часто устанавливается в 0 [SysV] независимо от целевой платформы
Стефан Шазелас
1
В этом поле указывается, использует ли файл ELF какие-либо специфичные для ОС расширения, значение по умолчанию - 0. Более подробное описание здесь (в EI_OSABI).
Лейаз

Ответы:

8

Между исполняемыми файлами ELF на разных платформах мало различий. «UNIX - Система V» - это общий язык; Система V - это источник формата ELF . Соответствующее числовое значение равно 0. Это значение указывает на то, что исполняемый файл не использует расширение для конкретной ОС. Debian GNU / Linux, по крайней мере, настраивает GCC / binutils для генерации исполняемых файлов с этим полем по умолчанию равным 0.

Жиль "ТАК - перестань быть злым"
источник
3
И стандарт ELF говорит, что 0 означает «ELFOSABI_NONE 0 Нет расширений или не указано» sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Сиро Сантилли 冠状 冠状 审查 六四 事件 法轮功