リンカ・ローダ実践開発テクニック(リンカ ローダ ジッセン カイハツ テクニック)
実行ファイルを作成するために必須の技術
ハードウェア- 著者:
- 坂井弘亮(サカイ,ヒロアキ)
- 出版社:
- CQ出版
- 出版日:
- 2010年09月
- ISBN:
- 9784789838078
- シリーズ:
- Computer technology
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
本書では、リンカとローダについて、実践を交えながら説明します。コア・ダンプからの実行再開やリンカの自作など、興味深い実験も行います。
技書の森解説
コンパイラが出力したオブジェクトファイルは、それ単体では動きません。複数のオブジェクトとライブラリを結合してアドレスを確定させるリンカと、できあがった実行ファイルをメモリに載せて制御を渡すローダを経て、はじめてプログラムとして走ります。『リンカ・ローダ実践開発テクニック』 (坂井弘亮 著、 CQ 出版、 2010 年 9 月刊、 303 ページ) は、この普段は意識しない工程を、 ELF 形式の実行ファイルを自分の手で解析し、簡易なローダとリンカを実際に作ることで解き明かす実践書です。副題は「実行ファイルを作成するために必須の技術」で、版元の紹介文にはコア・ダンプからの実行再開やリンカの自作といった実験を行うことが明記されています。
全 11 章の構成、 ELF 解析から簡易リンカの作成へ
構成は全 11 章です。第 1 章でリンカとローダの役割を整理した後、第 2 章と第 3 章で ELF 形式とライブラリ・アーカイブの内部構造を解析します。第 4 章はリンカで遊んでみる実験の章で、第 5 章から第 7 章にかけてリンカ・スクリプトの役割と動作、それを使った実験、コマンド・ライン指定による動作の違いとリンカの利用法へと進みます。後半は作る章が続き、第 8 章でローダの原理をもとに簡易ローダを作成し、第 9 章でコア・ダンプを解析し、第 10 章で簡易リンカを作成し、第 11 章で共有ライブラリの使い方を扱います。読み解く、試す、作るという順序が章立てに埋め込まれているため、前半で得た知識を後半の自作でそのまま使う構造になっています。
セクションとシンボル、リンカ・スクリプトが決めるメモリレイアウト
リンクの仕組みを理解する鍵は二つの事実にあります。オブジェクトファイルは .text や .data 、.bss といったセクションの集まりであること、そして関数名や変数名はシンボルとして別表に記録されていることです。リンカはセクションを結合して各シンボルの最終アドレスを決め、参照箇所を書き換える再配置を行います。 undefined reference や multiple definition といったリンクエラーはこのシンボル解決の段階で起きる現象なので、仕組みを知っていれば原因の切り分けが速くなります。組込み開発でとくに重要なのがリンカ・スクリプトで、 ROM と RAM のどの番地に何を置くかという メモリレイアウト を宣言する役目を担います。 C 言語の入門書ではほとんど触れられないこの層を、本書は読解、実験、自作の三段で扱います。ローダ側では、実行ファイルをメモリに展開して制御を渡す動作を簡易実装することで、 OS がプロセスを起動するときに何をしているかが具体化します。共有ライブラリの使い方を扱う第 11 章は、静的リンクとの対比で動的リンクを理解する手がかりになります。
2010 年刊行時点の Unix 系環境と C 言語を前提に読む注意
ELF は Linux をはじめ Unix 系 OS の標準的な実行ファイル形式で、リンカ・スクリプトの文法は GNU ld のものが事実上の標準です。刊行は 2010 年ですが、 ELF の構造、シンボルと再配置の概念、リンカ・スクリプトの基本的な書き方は 2026 年時点でも同じ形で使われており、この分野の本は内容が古びる速度が遅い部類に入ります。前提知識としては C 言語 の読み書きが必須で、 ELF の解析は構造体とポインタでヘッダを読み解く作業になるため、 16 進ダンプと仕様を突き合わせる根気も求められます。逆に、アプリケーション層の生産性を上げたい人や、特定の言語やフレームワークの使い方を学びたい人にとっては、本書の内容は日々の開発に直結しません。 Windows の PE 形式を主目的にする場合も、本書は ELF に絞っているため、概念の理解には役立っても手順はそのまま使えません。
組込み開発者と OS 自作派、リンクエラーに悩む C プログラマへ
元が取れるのは、リンカ・スクリプトを自分で書く、あるいは既存のものを改変する必要がある組込み開発者です。スタートアップコードとメモリマップの関係が腑に落ちると、起動しないファームウェアを追うときに見るべき場所が変わります。著者の坂井弘亮氏は同じ 2010 年に『 12 ステップで作る組込み OS 自作入門』 (カットシステム) を刊行しており、 OS 自作の過程でリンカとローダに突き当たった読者が、その足元を固める一冊としても機能します。類書では John R. Levine の『 Linkers & Loaders 』 (邦訳あり) が各種ファイル形式の比較と理論に強いのに対し、本書は ELF に絞って手を動かす点で使い分けられます。
本書から得られるのは、リンクエラーのメッセージを構造的に読み解く力、コア・ダンプの中身を恐れずに開く力、そして実行ファイルがどう組み立てられるかを人に説明できる理解です。低レイヤーの学び方全般は OS・低レイヤー本ガイド にまとめていますが、リンクとロードという一点を掘り下げる日本語の実践書として、本書は手元に置く価値のある選択です。
言及 Qiita 記事 (40 件)
アセンブラへの道 coding(42)
♡ 371coding, アセンブラ, 16進数, 小川メソッド, CountdownCalendar2022RustでRISC-V OS自作!はじめの一歩
♡ 152Rust, RISCV, OS自作RustでOSを書いてみる(環境構築編)
♡ 144Rust, 自作OS何がOS実装の理解を難しくしているのかとGNU assemblyの準備
♡ 69UNIX, assembly, OS, xv6ELF形式のOSを起動してみた。
♡ 34ELF, 自作OSxv6実装の詳解(boot処理編: segmentationとpagingを中心に)
♡ 26OS, xv6, paging, segmentationelf.hを読んで実行可能ファイルを直書きする
♡ 22ELFassemblyからhello world programを追いかける
♡ 18Linux, 初心者, assembly, x86_64, ELFELF形式のヘッダ部分を解析する単純なプログラムを作ってみた。
♡ 16ELFコンパイル・リンク・ロードの結果を一覧する
♡ 5C++
この本に興味がある方におすすめ
この本に関連
坂井弘亮 の他の書籍
関連記事
技術書の内容を実務に活かす方法 - 読んで終わりにしない
技術書で学んだ知識を実際の仕事に適用するための 3 ステップを紹介。「読んだだけ」で終わらせず、スキルに変える具体的な方法を解説します。
深夜 3 時のデプロイ前に読み返したい 1 ページ
本番デプロイの直前、最終確認のチェックリストとして技術書の特定のページが役立つことがあります。緊張の場面で頼りになる「お守りの 1 ページ」の見つけ方と活用法。
本についてくるダウンロード素材を使い倒す
プログラミングの本には、サンプルコードや練習用データのダウンロード特典がついていることがあります。素材の探し方と、完成版コードの使い方を解説します。