Чому 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) 

Будь ласка, покажіть нам 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] незалежно від цільової платформи
Stéphane Chazelas

1
У цьому полі вказується, якщо файл ELF використовує будь-які розширення для ОС, за замовчуванням - 0. Більш детальний опис тут (на EI_OSABI).
Леяз

Відповіді:


8

Існує небагато відмінностей між виконуваними файлами ELF на різних платформах. "UNIX - система V" є спільним принципом; Система V - це те, звідки походить формат ELF . Відповідне числове значення дорівнює 0. Це значення вказує на те, що виконуваний файл не використовує будь-якого розширення для ОС. Принаймні, Debian GNU / Linux налаштовує GCC / binutils для генерування виконуваних файлів із цим полем за замовчуванням.


3
А стандарт ELF говорить, що 0 означає "ELFOSABI_NONE 0 Немає розширень чи не вказано
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.