KO ファイル形式とは?
「.ko」ファイルは Linux カーネル用のロード可能カーネルモジュール (LKM) です。これは、再起動や再コンパイルを必要とせずに、実行時にカーネル機能を拡張するバイナリプラグインです。一般的な用途には、デバイスドライバ(グラフィックス、ネットワーク、ストレージ)、ファイルシステムの実装、およびセキュリティサブシステムが含まれます。
構造的には、「.ko」ファイルは ELF 再配置可能オブジェクト(タイプ「ET_REL」)であり、標準の ELF マジックバイト(「0x7F 0x45 0x4C 0x46」)を「.so」共有ライブラリと共有しています。特徴的な機能は「.modinfo」という ELF セクションで、ここには「modinfo」を介して読み取り可能な「key=value」形式のメタデータ(作成者、説明、ライセンス、「vermagic」(正確なカーネルバージョン + SMP + ABI 文字列)、および設定可能なパラメータの「parm」エントリ)が格納されています。「.ko」という命名規則は、Linux カーネル 2.6 (2003年) で古い「.o」サフィックスに取って代わりました。
モジュールは「insmod」または「modprobe」でロードされ、「rmmod」でアンロードされます。これらはすべて「kmod」パッケージの一部です。「vermagic」文字列は実行中のカーネルと完全に一致する必要があります。不一致があるとロードが拒否されます。オプションの「__versions」ELF セクションには、ABI 検証のためにエクスポートされたシンボルごとの CRC32 チェックサムが格納されます。
カーネル 3.3 以降、ディストリビューションのモジュールは日常的に「.ko.xz」、「.ko.gz」、または「.ko.zst」として圧縮されています。「modprobe」はこれらを透過的に解凍します。セキュアブートシステムでは、モジュール署名(「CONFIG_MODULE_SIG」)によって ELF コンテンツの後に RSA または ECDSA 署名が追加されます。ロックダウンが有効なカーネルは、署名のないモジュールを拒否します。
セキュリティと安全性
リスク: HIGHカーネルモジュールは、最高権限レベルであるリング 0 (カーネル) 権限で実行されます。悪意のある「.ko」ファイルは、ルートキットのインストール、システムコールの傍受、監査ログの無効化など、あらゆることを実行できます。信頼できないソースから「.ko」ファイルをロードしないでください。ディストリビューションのモジュールは署名されており、セキュアブートはモジュール署名の検証を強制します。署名エラーのために「.ko」のロードが拒否された場合は、署名の強制を無効にするのではなく、その理由を調査してください。
形式の詳細
概要KO ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | ELF 再配置可能オブジェクト (ET_REL)、ターゲットアーキテクチャに応じて 32 ビットまたは 64 ビット |
| マジックバイト | ファイルオフセット 0 に 0x7F 0x45 0x4C 0x46 (0x7F の後に ASCII «ELF»)。 .so 共有ライブラリと同一 |
| バイト順序 | アーキテクチャに依存:x86/ARM ではリトルエンディアン、MIPS/PowerPC ではビッグエンディアン |
| 主要な ELF セクション | .modinfo - 作成者、ライセンス、vermagic、バージョン、parm、およびエイリアスのメタデータを key=value ペアとして格納 |
| ABI 強制 | .modinfo 内の vermagic 文字列が正確なカーネルバージョン + SMP フラグをエンコード。不一致はロード拒否の原因となる |
| シンボル CRC | ABI 検証のためにエクスポートされたカーネルシンボルごとの CRC32 を含むオプションの __versions ELF セクション |
| モジュール署名 | ELF データの後に付加された RSA/ECDSA 署名 (CONFIG_MODULE_SIG)。ロックダウン有効なカーネルには有効な署名が必要 |
| 圧縮 | ディストリビューションモジュールは .ko.xz、.ko.gz、または .ko.zst として圧縮。modprobe が透過的に解凍 (カーネル 3.3+) |
| ロードツール | insmod (直接ロード)、modprobe (依存関係対応)、rmmod (アンロード) - すべて kmod パッケージの一部 |
| メタデータツール | modinfo(8) が .modinfo セクションを読み取り、depmod(8) が modules.dep 依存関係マップを構築 |
| 標準的なサイズ | 5 KB - 10 MB (デバイスドライバモジュールによって大きく異なる) |
| 命名の歴史 | Linux 2.6.0 (2003年) 以降、カーネルモジュールのサフィックスが .o から .ko に変更 |
| 移植性 | Linux 専用。カーネル側のモジュールインフラストラクチャがない他の ELF ベースのシステムとは互換性なし |
| リリース日 | 2003 (Linux kernel 2.6; .ko replaced .o module naming convention) |
| 最新バージョン | N/A (ELF format is stable; kernel ABI versioning via vermagic string) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | www.kernel.org |
KO の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。KO ファイルについて最初の質問をしてみましょう。