Dlaczego readelf pokazuje „System V” jako mój system operacyjny zamiast Linuksa?


10

Skompilowałem mały program C (2 linie kodów) z gcc, aby spróbować zrozumieć format pliku ELF. Robię readelf -hna pliku obiektowym, mam w nagłówku:

OS/ABI:                            UNIX - System V 

Korzystam z Fedory, więc dlaczego nie jest to Linux?

Edycja : skompilowałem

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

z gcc -o main.o -c main.c. Moja wersja gcc to

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 

Pokaż nam i) skompilowany kod ii) wynik gcc --versioni iii) dokładne polecenie użyte do jego skompilowania.
terdon

Odpowiednio zredagowałem pytanie.
alex_reader

Właśnie zrobiłem readelf -h /bin/lsna Debianie GNU / Linux. To także pokazało OS/ABI: UNIX - System V. Domyślam się, że ABI jest używany na więcej niż jednym jądrze, nie tylko na Linuksie. Wiem też, że Linux obsługuje więcej niż jeden ABI.
ctrl-alt-delor

6
Wikipedia mówi, że [pole OSABI w nagłówku ELF] jest często ustawione na 0 [SysV] niezależnie od platformy docelowej
Stéphane Chazelas

1
To pole informuje, czy plik ELF używa rozszerzeń specyficznych dla systemu operacyjnego, wartością domyślną jest 0. Bardziej szczegółowy opis tutaj (na EI_OSABI).
Leiaz

Odpowiedzi:


8

Istnieje kilka różnic między plikami wykonywalnymi ELF na różnych platformach. „UNIX - System V” to wspólna płaszczyzna; System V jest źródłem formatu ELF . Odpowiednia wartość liczbowa to 0. Ta wartość wskazuje, że plik wykonywalny nie używa żadnego rozszerzenia specyficznego dla systemu operacyjnego. Debian GNU / Linux przynajmniej konfiguruje GCC / binutils w celu generowania plików wykonywalnych z tym polem ustawionym domyślnie na 0.


3
A standard ELF mówi, że 0 oznacza „ELFOSABI_NONE 0 Brak rozszerzeń lub nieokreślony” sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli 法轮功 病毒 审查 六四 事件 法轮功
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.