Saya menyusun program C kecil (2 baris kode) dengan gcc untuk mencoba memahami format file ELF. Melakukan readelf -h
pada 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)
gcc --version
dan iii) perintah persis yang Anda gunakan untuk mengompilasinya.readelf -h /bin/ls
di debian gnu / linux. Itu juga menunjukkanOS/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.Jawaban:
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.
sumber