Hva er S-filformatet?
En .s-fil er en kildekodefil i assemblerspråk i ren tekst som brukes på tvers av Unix, Linux, macOS og innebygde verktøykjeder. Den inneholder menneskelig lesbare CPU-instruksjoner - mnemonics, operander, assemblerdirektiver og etiketter - som en assembler oversetter direkte til objektkode.
Utvidelsen .s er en konvensjon fra Unix C-kompilatorer som dateres tilbake til 1970-tallet. Ved å kjøre gcc -S på en C-kildekodefil stoppes kompileringen etter kodegenerering og skriver en .s-fil, slik at du kan inspisere eller finjustere kompilatorens utdata før assemblering. Den filen sendes deretter til as (GNU-assembleren) for å produsere en .o-objektfil klar for lenking.
En subtil, men viktig konvensjon skiller liten .s fra stor .S: .s-filer går direkte til assembleren, mens .S-filer går gjennom C-preprosessoren først, noe som tillater direktiver som #include, #define og #ifdef - et skille som kjerne- og fastvarekoder baserer seg tungt på.
Syntaksen varierer etter verktøykjede. GNU as bruker som standard AT&T-syntaks på x86; Windows-assemblere som MASM og Intel-stil NASM bruker Intel-syntaks. Det samme .s-filoppsettet brukes uavhengig av mål-ISA - x86-64, ARM/AArch64, RISC-V, MIPS og andre - så selve utvidelsen formidler ingen informasjon om arkitektur.
.s-filer har ingen magic bytes og har MIME-typen text/x-asm. Alle tekstredigeringsprogrammer kan åpne dem; redigeringsprogrammer med syntaksutheving for assembler som VS Code, Vim og Emacs foretrekkes for større filer. Den nært beslektede .asm-utvidelsen tjener samme formål på mange ikke-Unix-verktøykjeder.
Sikkerhet og trygghet
RISIKO: LOWEn .s-fil er ren tekst og gjør ingenting alene - den kan ikke kjøre før du bevisst assembler og utfører den. Risikoen er den samme som for all kildekode du velger å bygge: assembler kan inneholde instruksjoner som gjør alt CPU-en tillater, så bare assembler og kjør .s-filer fra kilder du stoler på, og les ukjent assembler før du bygger den. Å åpne en .s i et tekstredigeringsprogram for å se på den er helt trygt.
Formatdetaljer
i et nøtteskall- S-programmeringsspråk kildekode - Kildekode for det statistiske språket S (forgjengeren til R); sjelden i dag, men sees fortsatt i eldre statistikk-kode.
- Scheme-kildekode (uvanlig) - Noen ganger en Scheme/Lisp-kildekodefil, selv om .scm er den vanlige utvidelsen.
Programmer som åpner S-filer
Tekniske detaljer
dyp spesifikasjon| Filtype | Kildekode for assemblerspråk i ren tekst |
| MIME-type | text/x-asm (også akseptert: text/x-assembly, text/plain) |
| Koding | ASCII / UTF-8 |
| Filsignatur (magic bytes) | Ingen - ren tekst uten fast hode; begynner vanligvis med en kommentar (#, ;), en etikett (slutter med :), eller et direktiv som .text eller .global |
| Linjestruktur | Valgfri etikett, assemblerdirektiv eller CPU-mnemonic med operander, innebygd kommentar - én logisk operasjon per linje |
| Konvensjon for store/små bokstaver | Liten .s bles assemblert direkte; stor .S kjøres først gjennom C-preprosessoren (støtter #include, #define, #ifdef) |
| Kompilator-emisjon | gcc -S eller clang -S sender ut en .s-fil fra C/C++ kildekode, og stopper byggeprosessen etter kodegenerering og før assemblering |
| Støttede ISA-er | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR, og andre - utvidelsen er ISA-nøytral |
| Syntaksvarianter | AT&T-syntaks (standard for GNU as på x86), Intel-syntaks (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Vanlige assemblerdirektiver | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Verktøykjeder | GNU Binutils (as), LLVM/Clang integrert assembler, Microsoft MASM, NASM, yasm, armasm |
| Rolle i byggeprosessen | Mellomliggende tekststadium mellom kompilatorkodegenerering og opprettelse av objektfil; assemblert av as eller tilsvarende for å produsere en .o-fil |
| Preprosesseringsstøtte | .S-varianten (stor bokstav) sendes gjennom cpp før assemblering, noe som muliggjør betinget kompilering og makroekspansjon inne i asm-kilden |
| Typisk filstørrelse | 1 KB - 500 KB |
| Tilknyttede miljøer | Linux, Unix, macOS, Windows, innebygd/bare-metal (mikrokontrollere, kjerneoppstartskode, bootloadere) |
| Utgitt | 1970s (Unix C compiler toolchain convention) |
| Siste versjon | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | sourceware.org |
S-konverteringer
Spørsmål og svar fra fellesskapet
spurt av brukereIngen spørsmål ennå - vær den første til å spørre om S-filer.