Pourquoi readelf affiche-t-il «System V» comme mon système d'exploitation au lieu de Linux?

10

J'ai compilé un petit programme C (2 lignes de codes) avec gcc pour essayer de comprendre le format de fichier ELF. Faire un readelf -hsur le fichier objet, j'ai dans l'en-tête:

OS/ABI:                            UNIX - System V 

J'utilise Fedora, alors pourquoi n'est-ce pas Linux à la place?

Edit : j'ai compilé

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

avec gcc -o main.o -c main.c. Ma version gcc est

gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4) 
alex_reader
la source
Veuillez nous montrer i) le code que vous avez compilé ii) la sortie de gcc --versionet iii) la commande exacte que vous avez utilisée pour le compiler.
terdon
J'ai modifié la question en conséquence.
alex_reader
Je viens de le faire readelf -h /bin/lssur Debian GNU / Linux. Cela a également montré OS/ABI: UNIX - System V. Je suppose que l'ABI est utilisé sur plusieurs noyaux, pas seulement Linux. Je sais également que Linux prend en charge plus d'un ABI.
ctrl-alt-delor
6
Wikipedia dit qu'il [le champ OSABI dans l'en-tête ELF] est souvent défini sur 0 [SysV] quelle que soit la plate
Stéphane Chazelas
1
Ce champ indique si le fichier ELF utilise des extensions spécifiques au système d'exploitation, la valeur par défaut est 0. Description plus détaillée ici (sur EI_OSABI).
Leiaz

Réponses:

8

Il existe peu de différences entre les exécutables ELF sur différentes plates-formes. «UNIX - System V» est le terrain d'entente; Le système V est à l'origine du format ELF . La valeur numérique correspondante est 0. Cette valeur indique que l'exécutable n'utilise aucune extension spécifique au système d'exploitation. Debian GNU / Linux, au moins, configure GCC / binutils pour générer des exécutables avec ce champ mis à 0 par défaut.

Gilles 'SO- arrête d'être méchant'
la source
3
Et la norme ELF indique que 0 signifie "ELFOSABI_NONE 0 Aucune extension ou non spécifié" sco.com/developers/gabi/2003-12-17/ch4.eheader.html
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功