Skompilowałem mały program C (2 linie kodów) z gcc, aby spróbować zrozumieć format pliku ELF. Robię readelf -h
na 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)
gcc --version
i iii) dokładne polecenie użyte do jego skompilowania.readelf -h /bin/ls
na Debianie GNU / Linux. To także pokazałoOS/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.Odpowiedzi:
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.
źródło