Mengapa readelf menunjukkan "System V" sebagai OS saya dan bukan Linux?

10

Saya menyusun program C kecil (2 baris kode) dengan gcc untuk mencoba memahami format file ELF. Melakukan readelf -hpada file objek, saya miliki di header:

OS/ABI:                            UNIX - System V 

Saya menggunakan Fedora, jadi mengapa bukan Linux?

Sunting : Saya kompilasi

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

dengan gcc -o main.o -c main.c. Versi gcc saya adalah

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 
alex_reader
sumber
Tolong tunjukkan pada kami i) kode yang Anda kompilasi ii) hasil dari gcc --versiondan iii) perintah persis yang Anda gunakan untuk mengompilasinya.
terdon
Saya telah mengedit pertanyaan sesuai.
alex_reader
Saya baru saja melakukannya readelf -h /bin/lsdi debian gnu / linux. Itu juga menunjukkan OS/ABI: UNIX - System V. Dugaan saya adalah ABI digunakan pada lebih dari satu kernel, bukan hanya linux. Saya juga tahu bahwa linux mendukung lebih dari satu ABI.
ctrl-alt-delor
6
Wikipedia mengatakan Ini [bidang OSABI di header ELF] sering diatur ke 0 [SysV] terlepas dari platform target
Stéphane Chazelas
1
Bidang ini memberi tahu jika file ELF menggunakan ekstensi spesifik OS apa pun, defaultnya adalah 0. Lebih banyak deskripsi terperinci di sini (di EI_OSABI).
Leiaz

Jawaban:

8

Ada beberapa perbedaan antara executable ELF pada platform yang berbeda. "UNIX - System V" adalah landasan bersama; Sistem V adalah asal format ELF . Nilai numerik yang sesuai adalah 0. Nilai ini menunjukkan bahwa executable tidak menggunakan ekstensi spesifik OS. Debian GNU / Linux, setidaknya, mengkonfigurasi GCC / binutils untuk menghasilkan executable dengan bidang ini diatur ke 0 secara default.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
Dan standar ELF mengatakan 0 berarti "ELFOSABI_NONE 0 Tidak ada ekstensi atau tidak ditentukan" sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli 冠状 病毒 审查 六四 事件 事件 法轮功