¿Qué es el formato de archivo S?
Un archivo .s es un archivo de código fuente en lenguaje ensamblador de texto plano utilizado en Unix, Linux, macOS y cadenas de herramientas integradas. Contiene instrucciones de CPU legibles por humanos (mnemónicos, operandos, directivas de ensamblador y etiquetas) que un ensamblador traduce directamente en código objeto.
La extensión .s es una convención del flujo de compilación de C en Unix que data de la década de 1970. Ejecutar gcc -S en un archivo fuente C detiene la compilación después de la generación de código y escribe un archivo .s, lo que permite inspeccionar o ajustar manualmente la salida del compilador antes de ensamblar. Ese archivo se pasa luego a as (el ensamblador de GNU) para producir un archivo objeto .o listo para el enlazado.
Una convención sutil pero importante separa la .s minúscula de la .S mayúscula: los archivos .s van directamente al ensamblador, mientras que los archivos .S pasan primero por el preprocesador de C, lo que permite directivas #include, #define e #ifdef, una distinción en la que confían mucho los códigos base de kernels y firmwares.
La sintaxis varía según la cadena de herramientas. GNU as utiliza por defecto la sintaxis AT&T en x86; los ensambladores de Windows como MASM y NASM de estilo Intel utilizan la sintaxis Intel. Se utiliza el mismo diseño de archivo .s independientemente de la ISA de destino (x86-64, ARM/AArch64, RISC-V, MIPS y otros), por lo que la extensión en sí no transmite información de arquitectura.
Los archivos .s no contienen magic bytes y tienen el tipo MIME text/x-asm. Cualquier editor de texto los abre; se prefieren editores con resaltado de sintaxis de ensamblador como VS Code, Vim y Emacs para archivos más grandes. La extensión relacionada .asm sirve para el mismo propósito en muchas cadenas de herramientas que no son Unix.
Seguridad y protección
RIESGO: LOWUn archivo .s es texto plano y no hace nada por sí solo; no puede ejecutarse hasta que lo ensamble y ejecute deliberadamente. El riesgo es el mismo que con cualquier código fuente que decida construir: el ensamblador puede contener instrucciones que hagan cualquier cosa que la CPU permita, por lo que solo ensamble y ejecute archivos .s de fuentes en las que confíe, y lea el ensamblador desconocido antes de construirlo. Abrir un .s en un editor de texto para verlo es completamente seguro.
Detalles del formato
en pocas palabras- Fuente del lenguaje de programación S - Código fuente para el lenguaje estadístico S (predecesor de R); raro hoy en día, todavía se ve en código estadístico heredado.
- Fuente de Scheme (poco común) - Ocasionalmente un archivo fuente de Scheme/Lisp, aunque .scm es la extensión habitual.
Programas que abren archivos S
Detalles técnicos
especificación profunda| Tipo de archivo | Código fuente de lenguaje ensamblador en texto plano |
| Tipo MIME | text/x-asm (también se acepta: text/x-assembly, text/plain) |
| Codificación | ASCII / UTF-8 |
| Firma de archivo (magic bytes) | Ninguna: texto plano sin encabezado fijo; normalmente comienza con un comentario (#, ;), una etiqueta (que termina en :) o una directiva como .text o .global |
| Estructura de línea | Etiqueta opcional, directiva de ensamblador o mnemónico de CPU con operandos, comentario en línea: una operación lógica por línea |
| Convención de mayúsculas | La .s minúscula se ensambla directamente; la .S mayúscula se pasa primero por el preprocesador de C (admite #include, #define, #ifdef) |
| Emisión del compilador | gcc -S o clang -S emite un archivo .s desde el código fuente C/C++, deteniendo el flujo de construcción después de la generación de código y antes del ensamblaje |
| ISAs compatibles | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR y otros: la extensión es neutral respecto a la ISA |
| Variantes de sintaxis | Sintaxis AT&T (predeterminada de GNU as en x86), sintaxis Intel (MASM, NASM), ARM Unified Assembly Language (UAL) |
| Directivas de ensamblador comunes | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| Cadenas de herramientas | GNU Binutils (as), ensamblador integrado LLVM/Clang, Microsoft MASM, NASM, yasm, armasm |
| Rol en el flujo de construcción | Etapa de texto intermedia entre la generación de código del compilador y la creación del archivo objeto; ensamblado por as o equivalente para producir un archivo .o |
| Soporte de preprocesamiento | La variante .S (mayúscula) se pasa a través de cpp antes del ensamblaje, lo que permite la compilación condicional y la expansión de macros dentro del código fuente asm |
| Tamaño de archivo típico | 1 KB - 500 KB |
| Entornos asociados | Linux, Unix, macOS, Windows, integrados/bare-metal (microcontroladores, código de inicio del kernel, cargadores de arranque) |
| Lanzado | 1970s (Unix C compiler toolchain convention) |
| Última versión | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | sourceware.org |
Conversiones de S
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos S.