Il existe plusieurs variantes aux exécutables a.out: OMAGIC, NMAGIC, QMAGIC ou ZMAGIC.
- Le format OMAGIC a des segments contiguës après l'en-tête: le segment de texte et de données ne sont pas séparés. Ce format était aussi utilisé pour les fichiers objets.
- Le format NMAGIC est comme le OMAGIC mise à part que le segment de données est chargé dans la page suivant la fin du segment de texte qui, lui, est en lecture seule.
- Le format ZMAGIC ajoute le support de la pagination à la demande (en) (les pages mémoire ne sont chargées que lorsqu'elles sont nécessaires; on parle alors de « Lazy loading »). La taille des segments code et données doit être un multiple de la taille de page.
- Le format QMAGIC permet à l'en-tête d'être dans la même page que le début du segment texte, permettant ainsi d'économiser une page mémoire. Les binaires QMAGIC sont généralement chargés une page avant la fin de l'espace d'adressage virtuel, permettant ainsi d'intercepter les références à un pointeur null lors d'une erreur de segmentation.
Structure
Un fichier a.out est découpé en sept sections; les voici dans l'ordre:
en-tête exec (« exec header »)
contient les paramètres utilisés par le noyau pour charger et exécuter le binaire, ainsi que les paramètres utilisés par l'éditeur de liens (ld) pour lier l'exécutable à d'autres. C'est la seule section obligatoire.
segment de texte (« text segment »)
contient le code machine et les données qui devront être chargé en mémoire quand le programme devra s'exécuter. Il peut être chargé dans une zone mémoire en lecture seule.
segment de données (« data segment »)
contient les données initialisées par le programme lui-même. Il est toujours chargé dans un segment mémoire qui est accessible en écriture.
réallocation de texte (« text relocations »)
contient des enregistrement utilisé par l'éditeur de liens pour mettre à jour les pointeurs du segment de texte quand plusieurs exécutables sont liés.
réallocation de données (« data relocations »)
comme dans la partie réallocation de texte, mais pour le segment de données.
table de symboles (« symbol table »)
table utilisée par l'éditeur de liens pour retrouver l'adresse des variables nommées ou des fonctions (symboles) entre différents binaires.
table de chaîne (« string table »)
contient le nom associé à un symbole.