O que é o formato de ficheiro S?
Um arquivo .s é um arquivo de código-fonte em linguagem assembly de texto simples usado em Unix, Linux, macOS e toolchains embarcados. Ele contém instruções de CPU legíveis por humanos - mnemônicos, operandos, diretivas de montador e rótulos - que um montador (assembler) traduz diretamente em código de objeto.
A extensão .s é uma convenção de pipeline do compilador C do Unix que remonta à década de 1970. Executar gcc -S em um arquivo-fonte C interrompe a compilação após a geração do código e grava um arquivo .s, permitindo que você inspecione ou ajuste manualmente a saída do compilador antes da montagem. Esse arquivo é então passado para o as (o GNU assembler) para produzir um arquivo de objeto .o pronto para vinculação (linking).
Uma convenção sutil, mas importante, separa o .s minúsculo do .S maiúsculo: arquivos .s vão diretamente para o montador, enquanto arquivos .S passam primeiro pelo pré-processador C, permitindo diretivas como #include, #define e #ifdef - uma distinção da qual as bases de código de kernel e firmware dependem fortemente.
A sintaxe varia de acordo com o toolchain. O GNU as usa como padrão a sintaxe AT&T no x86; montadores Windows, como MASM e o NASM de estilo Intel, usam a sintaxe Intel. O mesmo layout de arquivo .s é usado independentemente do ISA de destino - x86-64, ARM/AArch64, RISC-V, MIPS e outros - portanto, a extensão em si não transmite informações de arquitetura.
Arquivos .s não possuem magic bytes e têm o tipo MIME text/x-asm. Qualquer editor de texto os abre; editores com realce de sintaxe de assembly, como VS Code, Vim e Emacs, são preferidos para arquivos maiores. A extensão .asm, intimamente relacionada, serve ao mesmo propósito em muitos toolchains não-Unix.
Segurança e proteção
RISCO: LOWUm arquivo .s é texto simples e não faz nada por si só - ele não pode ser executado até que você deliberadamente o monte e o execute. O risco é o mesmo de qualquer código-fonte que você decida compilar: o assembly pode conter instruções que fazem qualquer coisa que a CPU permita, portanto, monte e execute apenas arquivos .s de fontes em que você confia e leia o assembly desconhecido antes de compilá-lo. Abrir um .s em um editor de texto para visualizá-lo é completamente seguro.
Detalhes do formato
em resumo- Código-fonte da linguagem de programação S - Código-fonte para a linguagem estatística S (predecessora do R); raro hoje em dia, ainda visto em códigos estatísticos legados.
- Fonte Scheme (incomum) - Ocasionalmente um arquivo de origem Scheme/Lisp, embora .scm seja a extensão usual.
Programas que abrem arquivos S
Detalhes técnicos
especificação profunda| Tipo de arquivo | Código-fonte em linguagem assembly de texto simples |
| Tipo MIME | text/x-asm (também aceito: text/x-assembly, text/plain) |
| Codificação | ASCII / UTF-8 |
| Assinatura do arquivo (magic bytes) | Nenhuma - texto simples sem cabeçalho fixo; normalmente começa com um comentário (#, ;), um rótulo (terminando em :) ou uma diretiva como .text ou .global |
| Estrutura de linha | Rótulo opcional, diretiva de montador ou mnemônico de CPU com operandos, comentário inline - uma operação lógica por linha |
| Convenção de caixa | O .s minúsculo é montado diretamente; o .S maiúsculo é executado primeiro pelo pré-processador C (suporta #include, #define, #ifdef) |
| Emissão do compilador | gcc -S ou clang -S emite um arquivo .s a partir do código-fonte C/C++, interrompendo o pipeline de construção após a geração do código e antes da montagem |
| ISAs suportados | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR e outros - a extensão é neutra em relação ao ISA |
| Variantes de sintaxe | Sintaxe AT&T (padrão GNU as no x86), sintaxe Intel (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Diretivas comuns de montador | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Toolchains | GNU Binutils (as), montador integrado LLVM/Clang, Microsoft MASM, NASM, yasm, armasm |
| Papel no pipeline de construção | Estágio de texto intermediário entre a geração de código do compilador e a criação do arquivo de objeto; montado pelo as ou equivalente para produzir um arquivo .o |
| Suporte a pré-processamento | A variante .S (maiúscula) é passada pelo cpp antes da montagem, permitindo compilação condicional e expansão de macros dentro do código asm |
| Tamanho típico do arquivo | 1 KB - 500 KB |
| Ambientes associados | Linux, Unix, macOS, Windows, embarcados/bare-metal (microcontroladores, código de inicialização de kernel, bootloaders) |
| Lançado | 1970s (Unix C compiler toolchain convention) |
| Versão mais recente | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | sourceware.org |
Conversões de S
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos S.