Hvad er S-filformatet?
En .s-fil er en kildekodefil i assembly-sprog i almindeligt tekstformat, der bruges på tværs af Unix, Linux, macOS og indlejrede toolchains. Den indeholder læsbare CPU-instruktioner - mnemonics, operander, assembler-direktiver og labels - som en assembler oversætter direkte til objektkode.
.s-filtypen er en konvention fra Unix C-compiler-pipelinen, der stammer fra 1970'erne. Ved at køre gcc -S på en C-kildekodefil stoppes kompileringen efter kodegenerering, og der skrives en .s-fil, hvilket lader dig inspicere eller manuelt optimere compilerens output før assemblering. Denne fil sendes derefter til as (GNU-assembleren) for at producere en .o objektfil, der er klar til linkning.
En subtil, men vigtig konvention adskiller lille .s fra stort .S: .s-filer går direkte til assembleren, mens .S-filer først passerer gennem C-preprocessoren, hvilket tillader #include, #define og #ifdef direktiver - en sondring som kerne- og firmware-kodebaser læner sig tungt op ad.
Syntaksen varierer efter toolchain. GNU as bruger som standard AT&T-syntaks på x86; Windows-assemblere som MASM og Intel-stils NASM bruger Intel-syntaks. Det samme .s-fillayout bruges uanset mål-ISA - x86-64, ARM/AArch64, RISC-V, MIPS og andre - så selve filtypen formidler ingen information om arkitekturen.
.s-filer indeholder ingen magic bytes og har MIME-typen text/x-asm. Enhver teksteditor kan åbne dem; editorer med syntaksfremhævning til assembly, såsom VS Code, Vim og Emacs, foretrækkes til større filer. Den tæt beslægtede .asm filtype tjener samme formål på mange ikke-Unix toolchains.
Sikkerhed og tryghed
RISIKO: LOWEn .s-fil er almindelig tekst og gør intet i sig selv - den kan ikke køre, før du bevidst assembles og eksekverer den. Risikoen er den samme som ved enhver kildekode, du vælger at bygge: assembly kan indeholde instruktioner, der gør alt, hvad CPU'en tillader, så assembler og kør kun .s-filer fra kilder, du stoler på, og læs ukendt assembly, før du bygger den. Det er fuldstændig sikkert at åbne en .s-fil i en teksteditor for at se den.
Formatdetaljer
kort fortalt- S-programmeringssprog kildekode - Kildekode til det statistiske sprog S (forgængeren til R); sjælden i dag, ses stadig i ældre statistik-kode.
- Scheme-kildekode (ucommon) - Lejlighedsvis en Scheme/Lisp kildekodefil, selvom .scm er den sædvanlige filtype.
Programmer der åbner S-filer
Tekniske detaljer
dyb specifikation| Filtype | Almindelig tekst assembly-sprog kildekode |
| MIME-type | text/x-asm (også accepteret: text/x-assembly, text/plain) |
| Kodning | ASCII / UTF-8 |
| Filsignatur (magic bytes) | Ingen - almindelig tekst uden fast header; begynder typisk med en kommentar (#, ;), en label (slutter med :) eller et direktiv såsom .text eller .global |
| Linjestruktur | Valgfri label, assembler-direktiv eller CPU-mnemonic med operander, inline kommentar - én logisk operation pr. linje |
| Konvention for store/små bogstaver | Lille .s-fil assembles direkte; stort .S-fil køres først gennem C-preprocessoren (understøtter #include, #define, #ifdef) |
| Compiler-output | gcc -S eller clang -S udsender en .s-fil fra C/C++ kildekode, hvilket stopper byggeprocessen efter kodegenerering og før assemblering |
| Understøttede ISA'er | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR og andre - filtypen er ISA-neutral |
| Syntaksvarianter | AT&T-syntaks (standard for GNU as på x86), Intel-syntaks (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Almindelige assembler-direktiver | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Toolchains | GNU Binutils (as), LLVM/Clang integreret assembler, Microsoft MASM, NASM, yasm, armasm |
| Rolle i byggeprocessen | Mellemliggende tekststadie mellem compilerens kodegenerering og oprettelse af objektfil; assembles af as eller tilsvarende for at producere en .o-fil |
| Preprocessing-understøttelse | .S-varianten (stort bogstav) sendes gennem cpp før assemblering, hvilket muliggør betinget kompilering og makro-ekspansion inde i asm-kilden |
| Typisk filstørrelse | 1 KB - 500 KB |
| Associerede miljøer | Linux, Unix, macOS, Windows, indlejrede systemer/bare-metal (mikrocontrollere, kerne-opstartskode, bootloadere) |
| Udgivet | 1970s (Unix C compiler toolchain convention) |
| Seneste version | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Åben standard | Ja · royaltyfri |
| Specifikation | sourceware.org |
S-konverteringer
Fællesskabets Q&A
spurgt af brugereIngen spørgsmål endnu - vær den første til at spørge om S-filer.