Co to jest format pliku S?
Plik .s to tekstowy plik źródłowy języka asemblera używany w systemach Unix, Linux, macOS oraz w łańcuchach narzędzi dla systemów wbudowanych. Zawiera on czytelne dla człowieka instrukcje procesora - mnemoniki, operandy, dyrektywy asemblera i etykiety - które asembler tłumaczy bezpośrednio na kod obiektowy.
Rozszerzenie .s to konwencja potoku kompilatora C w systemie Unix datowana na lata 70. XX wieku. Uruchomienie gcc -S na pliku źródłowym C zatrzymuje kompilację po wygenerowaniu kodu i zapisuje plik .s, co pozwala na inspekcję lub ręczne dostrojenie wyjścia kompilatora przed asemblacją. Plik ten jest następnie przekazywany do as (GNU assembler) w celu wytworzenia pliku obiektowego .o gotowego do linkowania.
Subtelna, ale ważna konwencja oddziela małe .s od wielkiego .S: pliki .s trafiają bezpośrednio do asemblera, podczas gdy pliki .S przechodzą najpierw przez preprocesor C, co pozwala na użycie dyrektyw #include, #define oraz #ifdef - jest to rozróżnienie, na którym mocno opierają się bazy kodów jąder systemów i oprogramowania układowego.
Składnia różni się w zależności od łańcucha narzędzi. GNU as domyślnie używa składni AT&T na x86; asemblery Windows, takie jak MASM oraz NASM w stylu Intela, używają składni Intel. Ten sam układ pliku .s jest stosowany niezależnie od docelowej architektury ISA - x86-64, ARM/AArch64, RISC-V, MIPS i innych - więc samo rozszerzenie nie przekazuje informacji o architekturze.
Pliki .s nie posiadają magicznych bajtów i mają typ MIME text/x-asm. Każdy edytor tekstu je otwiera; do większych plików preferowane są edytory z podświetlaniem składni asemblera, takie jak VS Code, Vim i Emacs. Blisko powiązane rozszerzenie .asm służy temu samemu celowi w wielu łańcuchach narzędzi spoza środowiska Unix.
Bezpieczeństwo
RYZYKO: LOWPlik .s jest zwykłym tekstem i sam w sobie nic nie robi - nie może zostać uruchomiony, dopóki celowo go nie zaasemblujesz i nie wykonasz. Ryzyko jest takie samo, jak w przypadku każdego kodu źródłowego, który zdecydujesz się zbudować: asembler może zawierać instrukcje wykonujące wszystko, na co pozwala procesor, więc należy asemblować i uruchamiać pliki .s tylko z zaufanych źródeł oraz czytać nieznany kod przed budowaniem. Otwarcie pliku .s w edytorze tekstu w celu podglądu jest całkowicie bezpieczne.
Szczegóły formatu
w pigułce- Źródło języka programowania S - Kod źródłowy języka statystycznego S (poprzednika R); dziś rzadki, wciąż spotykany w dziedzicznym kodzie statystycznym.
- Źródło Scheme (rzadkie) - Sporadycznie plik źródłowy Scheme/Lisp, choć standardowym rozszerzeniem jest .scm.
Programy otwierające pliki S
Szczegóły techniczne
specyfikacja| Typ pliku | Tekstowy plik źródłowy języka asemblera |
| Typ MIME | text/x-asm (akceptowane również: text/x-assembly, text/plain) |
| Kodowanie | ASCII / UTF-8 |
| Sygnatura pliku (magiczne bajty) | Brak - zwykły tekst bez stałego nagłówka; zazwyczaj zaczyna się od komentarza (#, ;), etykiety (kończącej się na :) lub dyrektywy takiej jak .text lub .global |
| Struktura linii | Opcjonalna etykieta, dyrektywa asemblera lub mnemonik procesora z operandami, komentarz w linii - jedna logiczna operacja na linię |
| Konwencja wielkości liter | Małe .s jest asemblowane bezpośrednio; wielkie .S jest najpierw przepuszczane przez preprocesor C (obsługuje #include, #define, #ifdef) |
| Emisja kompilatora | gcc -S lub clang -S emituje plik .s ze źródła C/C++, zatrzymując potok budowania po wygenerowaniu kodu, a przed asemblacją |
| Obsługiwane architektury ISA | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR i inne - rozszerzenie jest neutralne względem architektury |
| Warianty składni | Składnia AT&T (domyślna dla GNU as na x86), składnia Intel (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Częste dyrektywy asemblera | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Łańcuchy narzędzi | GNU Binutils (as), zintegrowany asembler LLVM/Clang, Microsoft MASM, NASM, yasm, armasm |
| Rola w potoku budowania | Pośredni etap tekstowy między generowaniem kodu przez kompilator a tworzeniem pliku obiektowego; asemblowany przez as lub odpowiednik w celu wytworzenia pliku .o |
| Obsługa preprocesora | Wariant .S (wielka litera) jest przekazywany przez cpp przed asemblacją, co umożliwia kompilację warunkową i rozwijanie makr wewnątrz źródła asm |
| Typowy rozmiar pliku | 1 KB - 500 KB |
| Powiązane środowiska | Linux, Unix, macOS, Windows, systemy wbudowane/bare-metal (mikrokontrolery, kod startowy jądra, bootloadery) |
| Wydano | 1970s (Unix C compiler toolchain convention) |
| Najnowsza wersja | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | sourceware.org |
Konwersje S
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki S.