Qu'est-ce que le format de fichier S ?
Un fichier .s est un fichier source en langage assembleur en texte brut utilisé sur Unix, Linux, macOS et les chaînes d'outils embarquées. Il contient des instructions CPU lisibles par l'homme - mnémoniques, opérandes, directives d'assembleur et étiquettes - qu'un assembleur traduit directement en code objet.
L'extension .s est une convention du pipeline du compilateur C Unix datant des années 1970. L'exécution de gcc -S sur un fichier source C interrompt la compilation après la génération du code et écrit un fichier .s, vous permettant d'inspecter ou d'ajuster manuellement la sortie du compilateur avant l'assemblage. Ce fichier est ensuite transmis à as (l'assembleur GNU) pour produire un fichier objet .o prêt pour l'édition de liens.
Une convention subtile mais importante sépare le .s minuscule du .S majuscule : les fichiers .s vont directement à l'assembleur, tandis que les fichiers .S passent d'abord par le préprocesseur C, autorisant les directives #include, #define et #ifdef - une distinction sur laquelle reposent fortement les bases de code des noyaux et des firmwares.
La syntaxe varie selon la chaîne d'outils. GNU as utilise par défaut la syntaxe AT&T sur x86 ; les assembleurs Windows tels que MASM et NASM (style Intel) utilisent la syntaxe Intel. La même structure de fichier .s est utilisée quel que soit l'ISA cible - x86-64, ARM/AArch64, RISC-V, MIPS et autres - de sorte que l'extension elle-même ne transmet aucune information sur l'architecture.
Les fichiers .s ne comportent pas d'octets magiques et ont le type MIME text/x-asm. N'importe quel éditeur de texte les ouvre ; les éditeurs avec coloration syntaxique pour l'assembleur tels que VS Code, Vim et Emacs sont préférables pour les fichiers volumineux. L'extension .asm, étroitement liée, remplit la même fonction sur de nombreuses chaînes d'outils non-Unix.
Sécurité et sûreté
RISQUE : LOWUn fichier .s est du texte brut et ne fait rien par lui-même - il ne peut pas s'exécuter tant que vous ne l'assemblez pas et ne l'exécutez pas délibérément. Le risque est le même que pour tout code source que vous choisissez de construire : l'assembleur peut contenir des instructions qui font tout ce que le CPU permet, donc n'assemblez et n'exécutez que des fichiers .s provenant de sources de confiance, et lisez l'assembleur inconnu avant de le construire. Ouvrir un .s dans un éditeur de texte pour le visualiser est totalement sûr.
Détails du format
en bref- Source du langage de programmation S - Code source pour le langage statistique S (prédécesseur de R) ; rare aujourd'hui, encore présent dans le code statistique hérité.
- Source Scheme (peu commun) - Occasionnellement un fichier source Scheme/Lisp, bien que .scm soit l'extension habituelle.
Programmes qui ouvrent les fichiers S
Détails techniques
spécifications approfondies| Type de fichier | Source en langage assembleur en texte brut |
| Type MIME | text/x-asm (également acceptés : text/x-assembly, text/plain) |
| Encodage | ASCII / UTF-8 |
| Signature de fichier (octets magiques) | Aucune - texte brut sans en-tête fixe ; commence généralement par un commentaire (#, ;), une étiquette (se terminant par :) ou une directive telle que .text ou .global |
| Structure des lignes | Étiquette optionnelle, directive d'assembleur ou mnémonique CPU avec opérandes, commentaire en ligne - une opération logique par ligne |
| Convention de casse | Le .s minuscule est assemblé directement ; le .S majuscule passe d'abord par le préprocesseur C (supporte #include, #define, #ifdef) |
| Émission du compilateur | gcc -S ou clang -S émet un fichier .s à partir d'une source C/C++, interrompant le pipeline de construction après la génération du code et avant l'assemblage |
| ISA supportés | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR, et autres - l'extension est neutre vis-à-vis de l'architecture |
| Variantes de syntaxe | Syntaxe AT&T (par défaut sur GNU as pour x86), syntaxe Intel (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Directives d'assembleur courantes | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Chaînes d'outils | GNU Binutils (as), assembleur intégré LLVM/Clang, Microsoft MASM, NASM, yasm, armasm |
| Rôle dans le pipeline de construction | Étape textuelle intermédiaire entre la génération de code du compilateur et la création du fichier objet ; assemblé par as ou équivalent pour produire un fichier .o |
| Support du prétraitement | La variante .S (majuscule) est passée par cpp avant l'assemblage, permettant la compilation conditionnelle et l'expansion de macros à l'intérieur de la source asm |
| Taille typique de fichier | 1 Ko - 500 Ko |
| Environnements associés | Linux, Unix, macOS, Windows, embarqué/bare-metal (microcontrôleurs, code de démarrage du noyau, chargeurs d'amorçage) |
| Publié | 1970s (Unix C compiler toolchain convention) |
| Dernière version | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Standard ouvert | Oui · libre de droits |
| Spécification | sourceware.org |
Conversions S
Q&R de la communauté
posées par les utilisateursPas encore de questions - soyez le premier à poser une question sur les fichiers S.