Wat is het S-bestandsformaat?
Een .s-bestand is een assembly-bronbestand in platte tekst dat wordt gebruikt in Unix, Linux, macOS en embedded toolchains. Het bevat voor mensen leesbare CPU-instructies - mnemonics, operanden, assembler-directives en labels - die een assembler rechtstreeks vertaalt naar objectcode.
De extensie .s is een conventie in de Unix C-compiler-pijplijn die dateert uit de jaren 70. Het uitvoeren van gcc -S op een C-bronbestand stopt de compilatie na het genereren van de code en schrijft een .s-bestand, zodat u de uitvoer van de compiler kunt inspecteren of handmatig kunt aanpassen voordat u deze assembleert. Dat bestand wordt vervolgens doorgegeven aan as (de GNU-assembler) om een .o-objectbestand te produceren dat klaar is voor koppeling.
Een subtiele maar belangrijke conventie scheidt de kleine letter .s van de hoofdletter .S: .s-bestanden gaan rechtstreeks naar de assembler, terwijl .S-bestanden eerst door de C-preprocessor gaan, wat #include, #define en #ifdef directives mogelijk maakt - een onderscheid waar kernel- en firmware-codebases zwaar op leunen.
De syntaxis varieert per toolchain. GNU as gebruikt standaard de AT&T-syntaxis op x86; Windows-assemblers zoals MASM en NASM in Intel-stijl gebruiken de Intel-syntaxis. Dezelfde .s-bestandsindeling wordt gebruikt ongeacht de doel-ISA - x86-64, ARM/AArch64, RISC-V, MIPS en andere - dus de extensie zelf geeft geen informatie over de architectuur.
.s-bestanden bevatten geen magic bytes en hebben het MIME-type text/x-asm. Elke teksteditor kan ze openen; editors met syntaxis-accentuering voor assembly, zoals VS Code, Vim en Emacs, hebben de voorkeur voor grotere bestanden. De nauw verwante .asm-extensie dient hetzelfde doel op veel niet-Unix toolchains.
Beveiliging & veiligheid
RISICO: LOWEen .s-bestand is platte tekst en doet uit zichzelf niets - het kan niet worden uitgevoerd totdat u het bewust assembleert en uitvoert. Het risico is hetzelfde als bij elke broncode die u besluit te bouwen: assembly kan instructies bevatten die alles doen wat de CPU toestaat, dus assembleer en voer alleen .s-bestanden uit van bronnen die u vertrouwt, en lees onbekende assembly voordat u deze bouwt. Het openen van een .s in een teksteditor om het te bekijken is volledig veilig.
Formaatdetails
in een notendop- S-programmeertaal bronbestand - Broncode voor de statistische taal S (voorganger van R); tegenwoordig zeldzaam, nog steeds te zien in legacy statistiekcode.
- Scheme-bronbestand (ongebruikelijk) - Af en toe een Scheme/Lisp-bronbestand, hoewel .scm de gebruikelijke extensie is.
Programma's die S-bestanden openen
Technische details
diepe specificaties| Bestandstype | Assembly-bronbestand in platte tekst |
| MIME-type | text/x-asm (ook geaccepteerd: text/x-assembly, text/plain) |
| Codering | ASCII / UTF-8 |
| Bestandshandtekening (magic bytes) | Geen - platte tekst zonder vaste header; begint meestal met een commentaar (#, ;), een label (eindigend op :) of een directive zoals .text of .global |
| Regelstructuur | Optioneel label, assembler-directive of CPU-mnemonic met operanden, inline commentaar - één logische bewerking per regel |
| Hoofdletterconventie | Kleine letter .s wordt direct geassembleerd; hoofdletter .S wordt eerst door de C-preprocessor gehaald (ondersteunt #include, #define, #ifdef) |
| Compiler-emissie | gcc -S of clang -S stoot een .s-bestand uit van C/C++-broncode, waarbij de build-pijplijn wordt gestopt na het genereren van de code en vóór de assemblage |
| Ondersteunde ISA's | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR en andere - de extensie is ISA-neutraal |
| Syntaxisvarianten | AT&T-syntaxis (standaard bij GNU as op x86), Intel-syntaxis (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Veelvoorkomende assembler-directives | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Toolchains | GNU Binutils (as), LLVM/Clang geïntegreerde assembler, Microsoft MASM, NASM, yasm, armasm |
| Rol in build-pijplijn | Tussenstadium in tekstvorm tussen het genereren van compiler-code en het maken van objectbestanden; geassembleerd door as of equivalent om een .o-bestand te produceren |
| Preprocessing-ondersteuning | De .S-variant (hoofdletter) wordt vóór de assemblage door cpp gehaald, wat voorwaardelijke compilatie en macro-expansie in de asm-broncode mogelijk maakt |
| Typische bestandsgrootte | 1 KB - 500 KB |
| Bijbehorende omgevingen | Linux, Unix, macOS, Windows, embedded/bare-metal (microcontrollers, kernel-opstartcode, bootloaders) |
| Uitgebracht | 1970s (Unix C compiler toolchain convention) |
| Laatste versie | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | sourceware.org |
S conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over S-bestanden.