S ファイル形式とは?
.sファイルは、Unix、Linux、macOS、および組み込みツールチェーンで使用されるプレーンテキストのアセンブリ言語ソースファイルです。これには、アセンブラがオブジェクトコードに直接変換する、人間が読める形式のCPU命令(ニーモニック、オペランド、アセンブラディレクティブ、ラベル)が含まれています。
.s拡張子は、1970年代にまで遡るUnixのCコンパイラパイプラインの慣習です。Cソースファイルに対して gcc -S を実行すると、コード生成後にコンパイルが停止し、.sファイルが書き出されます。これにより、アセンブル前にコンパイラの出力を検査したり、手動で調整したりできます。その後、そのファイルは as(GNUアセンブラ)に渡され、リンク可能な.oオブジェクトファイルが生成されます。
小文字の.sと大文字の.Sを区別する、微妙ですが重要な慣習があります。.sファイルは直接アセンブラに送られますが、.Sファイルは最初にCプリプロセッサを通過し、#include、#define、#ifdef などのディレクティブを使用できます。これはカーネルやファームウェアのコードベースが大きく依存している区別です。
構文はツールチェーンによって異なります。GNU as はx86でデフォルトのAT&T構文を使用しますが、MASMやIntelスタイルのNASMなどのWindowsアセンブラはIntel構文を使用します。ターゲットとするISA(x86-64、ARM/AArch64、RISC-V、MIPSなど)に関係なく同じ.sファイルレイアウトが使用されるため、拡張子自体にはアーキテクチャ情報は含まれません。
.sファイルにはマジックバイトはなく、MIMEタイプは text/x-asm です。任意のテキストエディタで開くことができますが、大きなファイルの場合はVS Code、Vim、Emacsなどのアセンブリ構文ハイライトを備えたエディタが推奨されます。密接に関連する.asm拡張子は、多くの非Unixツールチェーンで同じ目的で使用されます。
セキュリティと安全性
リスク: LOW.sファイルはプレーンテキストであり、それ自体では何もしません。意図的にアセンブルして実行するまでは実行不可能です。リスクは、ビルドすることを選択したあらゆるソースコードと同じです。アセンブリにはCPUが許可するあらゆる操作を行う命令を含めることができるため、信頼できるソースからの .s ファイルのみをアセンブル・実行し、なじみのないアセンブリはビルド前に確認してください。テキストエディタで .s を開いて閲覧することは完全に安全です。
形式の詳細
概要- Sプログラミング言語ソース - 統計言語S(R言語の前身)のソースコード。現在は稀ですが、レガシーな統計コードで見られることがあります。
- Schemeソース (稀) - 稀にScheme/Lispのソースファイルとして使われることがありますが、通常は .scm 拡張子が使用されます。
S ファイルを開くプログラム
技術的詳細
詳細仕様| ファイルタイプ | プレーンテキスト・アセンブリ言語ソース |
| MIMEタイプ | text/x-asm (text/x-assembly, text/plain も許容) |
| エンコーディング | ASCII / UTF-8 |
| ファイルシグネチャ (マジックバイト) | なし - 固定ヘッダーのないプレーンテキスト。通常、コメント (#, ;)、ラベル (: で終わる)、または .text や .global などのディレクティブで始まります |
| 行構造 | オプションのラベル、アセンブラディレクティブまたはオペランド付きのCPUニーモニック、インラインコメント - 1行につき1つの論理操作 |
| 大文字・小文字の慣習 | 小文字の .s は直接アセンブルされます。大文字の .S は最初にCプリプロセッサを通過します (#include, #define, #ifdef をサポート) |
| コンパイラ出力 | gcc -S または clang -S は、C/C++ソースから .s ファイルを出力し、コード生成後かつアセンブル前にビルドパイプラインを停止します |
| サポートされるISA | x86-64, ARM/AArch64, RISC-V, MIPS, POWER/PowerPC, AVR など - 拡張子はISAに依存しません |
| 構文バリアント | AT&T構文 (x86におけるGNU asのデフォルト), Intel構文 (MASM, NASM), ARM Unified Assembly Language (UAL) |
| 一般的なアセンブラディレクティブ | .text, .data, .bss, .global, .section, .align, .byte, .word, .long, .string |
| ツールチェーン | GNU Binutils (as), LLVM/Clang 統合アセンブラ, Microsoft MASM, NASM, yasm, armasm |
| ビルドパイプラインでの役割 | コンパイラのコード生成とオブジェクトファイル作成の間の中間テキスト段階。as または同等のツールでアセンブルされ、 .o ファイルを生成します |
| プリプロセッサのサポート | .S バリアント(大文字)はアセンブル前に cpp を通過し、アセンブリソース内での条件付きコンパイルやマクロ展開を可能にします |
| 典型的なファイルサイズ | 1 KB - 500 KB |
| 関連環境 | Linux, Unix, macOS, Windows, 組み込み/ベアメタル (マイコン, カーネルスタートアップコード, ブートローダー) |
| リリース日 | 1970s (Unix C compiler toolchain convention) |
| 最新バージョン | N/A (no versioned spec; depends on target CPU ISA and assembler) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | sourceware.org |
S の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。S ファイルについて最初の質問をしてみましょう。