Che cos'è il formato di file S?
Un file .s è un file sorgente in linguaggio assembly in formato testo semplice utilizzato su Unix, Linux, macOS e toolchain embedded. Contiene istruzioni CPU leggibili dall'uomo - mnemonici, operandi, direttive dell'assemblatore e etichette - che un assemblatore traduce direttamente in codice oggetto.
L'estensione .s è una convenzione della pipeline del compilatore C Unix risalente agli anni '70. L'esecuzione di gcc -S su un file sorgente C interrompe la compilazione dopo la generazione del codice e scrive un file .s, consentendo di ispezionare o ottimizzare manualmente l'output del compilatore prima dell'assemblaggio. Tale file viene poi passato ad as (il GNU assembler) per produrre un file oggetto .o pronto per il linking.
Una convenzione sottile ma importante separa il .s minuscolo dal .S maiuscolo: i file .s vanno direttamente all'assemblatore, mentre i file .S passano prima attraverso il preprocessore C, consentendo direttive come #include, #define e #ifdef - una distinzione su cui si basano pesantemente i codebase di kernel e firmware.
La sintassi varia a seconda della toolchain. GNU as utilizza per impostazione predefinita la sintassi AT&T su x86; gli assemblatori Windows come MASM e NASM (stile Intel) utilizzano la sintassi Intel. Lo stesso layout di file .s viene utilizzato indipendentemente dall'ISA di destinazione - x86-64, ARM/AArch64, RISC-V, MIPS e altri - quindi l'estensione stessa non fornisce informazioni sull'architettura.
I file .s non contengono magic bytes e hanno il tipo MIME text/x-asm. Qualsiasi editor di testo può aprirli; per i file più grandi sono preferibili editor con evidenziazione della sintassi assembly come VS Code, Vim ed Emacs. L'estensione correlata .asm serve allo stesso scopo su molte toolchain non Unix.
Sicurezza e incolumità
RISCHIO: LOWUn file .s è testo semplice e non fa nulla da solo: non può essere eseguito finché non lo si assembla ed esegue deliberatamente. Il rischio è lo stesso di qualsiasi codice sorgente che si sceglie di compilare: l'assembly può contenere istruzioni che eseguono qualsiasi operazione consentita dalla CPU, quindi assembla ed esegui file .s solo da fonti attendibili e leggi l'assembly sconosciuto prima di compilarlo. Aprire un file .s in un editor di testo per visualizzarlo è completamente sicuro.
Dettagli del formato
in sintesi- Sorgente linguaggio di programmazione S - Codice sorgente per il linguaggio statistico S (predecessore di R); raro oggi, ancora presente in codice statistico legacy.
- Sorgente Scheme (non comune) - Occasionalmente un file sorgente Scheme/Lisp, sebbene .scm sia l'estensione abituale.
Programmi che aprono file S
Dettagli tecnici
specifiche approfondite| Tipo di file | Sorgente in linguaggio assembly (testo semplice) |
| Tipo MIME | text/x-asm (accettati anche: text/x-assembly, text/plain) |
| Codifica | ASCII / UTF-8 |
| Firma del file (magic bytes) | Nessuna - testo semplice senza intestazione fissa; tipicamente inizia con un commento (#, ;), un'etichetta (che termina con :) o una direttiva come .text o .global |
| Struttura delle righe | Etichetta opzionale, direttiva dell'assemblatore o mnemonico CPU con operandi, commento inline - un'operazione logica per riga |
| Convenzione maiuscole/minuscole | Il formato minuscolo .s viene assemblato direttamente; il maiuscolo .S viene prima passato al preprocessore C (supporta #include, #define, #ifdef) |
| Emissione del compilatore | gcc -S o clang -S emette un file .s dal sorgente C/C++, interrompendo la pipeline di build dopo la generazione del codice e prima dell'assemblaggio |
| ISA supportate | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR e altri - l'estensione è neutra rispetto all'ISA |
| Varianti di sintassi | Sintassi AT&T (predefinita per GNU as su x86), sintassi Intel (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Direttive comuni dell'assemblatore | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Toolchain | GNU Binutils (as), assemblatore integrato LLVM/Clang, Microsoft MASM, NASM, yasm, armasm |
| Ruolo nella pipeline di build | Stadio di testo intermedio tra la generazione del codice del compilatore e la creazione del file oggetto; assemblato da as o equivalente per produrre un file .o |
| Supporto al preprocessing | La variante .S (maiuscola) viene passata attraverso cpp prima dell'assemblaggio, consentendo la compilazione condizionale e l'espansione delle macro all'interno del sorgente asm |
| Dimensione tipica del file | 1 KB - 500 KB |
| Ambienti associati | Linux, Unix, macOS, Windows, embedded/bare-metal (microcontrollori, codice di avvio del kernel, bootloader) |
| Rilasciato | 1970s (Unix C compiler toolchain convention) |
| Ultima versione | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Standard aperto | Sì · royalty-free |
| Specifica | sourceware.org |
Conversioni S
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file S.