Ich habe ein kleines C-Programm (2 Codezeilen) mit gcc kompiliert, um zu versuchen, das ELF-Dateiformat zu verstehen. Wenn readelf -h
ich eine Objektdatei mache, habe ich in der Kopfzeile:
OS/ABI: UNIX - System V
Ich verwende Fedora. Warum ist es nicht stattdessen Linux?
Edit : Ich habe kompiliert
int main(){
int x = 0;
x++;
}
mit gcc -o main.o -c main.c
. Meine gcc Version ist
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
gcc --version
und iii) den genauen Befehl, den Sie zum Kompilieren verwendet haben.readelf -h /bin/ls
auf Debian Gnu / Linux gemacht. Es zeigte sich auchOS/ABI: UNIX - System V
. Ich vermute, dass der ABI auf mehr als einem Kernel verwendet wird, nicht nur auf Linux. Ich weiß auch, dass Linux mehr als ein ABI unterstützt.Antworten:
Es gibt nur wenige Unterschiede zwischen ausführbaren ELF-Dateien auf verschiedenen Plattformen. "UNIX - System V" ist die gemeinsame Basis; In System V stammt das ELF- Format. Der entsprechende numerische Wert ist 0. Dieser Wert gibt an, dass die ausführbare Datei keine betriebssystemspezifische Erweiterung verwendet. Zumindest Debian GNU / Linux konfiguriert GCC / binutils so, dass ausführbare Dateien generiert werden, wobei dieses Feld standardmäßig auf 0 gesetzt ist.
quelle