本書は、リンカとローダがどのように動作するかについて、またメインフレーム・UNIX・WindowsなどさまざまなOSのオブジェクトファイル形式について、基礎から丁寧に説明したユニークな解説書。学生やプログラマの教科書として最適。
https://www.ohmsha.co.jp/book/9784274064371/
正誤表やDLデータ等がある場合はこちらに掲載しています
序章
第1章 リンクとロード
第2章 アーキテクチャに関する問題
第3章 オブジェクトファイル
第4章 記憶領域の割り当て
第5章 シンボルの管理
第6章 ライブラリ
第7章 再配置
第8章 ロードとオーバレイ
第9章 共有ライブラリ
第10章 動的なリンクとロード
第11章 高度なテクニック
参考文献
日本語版監訳者より
訳語対応表
凡例
序章
第1章 リンクとロード
1.1 リンカとローダは何をするのか?
1.2 アドレスのバインド:歴史的観点
1.3 リンクとロードの違い
1.3.1 2パスリンク
1.3.2 オブジェクトコードライブラリ
1.4 再配置とコードの修正
1.5 コンパイラドライバ
1.5.1 リンカのコマンド言語
1.6 リンクの実例
演習
第2章 アーキテクチャに関する問題
2.1 アプリケーションバイナリインターフェイス
2.2 メモリアドレス
2.2.1 バイト順序と整列
2.3 アドレスの形成
2.4 命令の形式
2.5 手続きの呼び出しとアドレス可能性
2.5.1 手続きの呼び出し
2.6 データと命令の参照
2.6.1 IBM 370
2.6.2 SPARC
2.6.3 Intel x86
2.7 ページングと仮想メモリ
2.7.1 プログラムのアドレス空間
2.7.2 マップされたファイル
2.7.3 共有ライブラリとプログラム
2.7.4 位置独立コード
2.8 Intel 386のセグメント
2.9 組み込みアーキテクチャ
2.9.1 アドレス空間の特異性
2.9.2 一様でないメモリ
2.9.3 メモリの整列
演習 47
第3章 オブジェクトファイル
3.1 オブジェクトファイルには何が格納されるか?
3.1.1 オブジェクト形式の設計
3.2 情報のないオブジェクト形式:MS-DOS .COMファイル
3.3 コードセクション:UNIX a.outファイル
3.3.1 a.outファイルのヘッダ
3.3.2 仮想メモリとの関係
3.4 再配置:MS-DOS EXEファイル
3.5 シンボルと再配置
3.6 再配置可能なa.out
3.6.1 再配置エントリ
3.6.2 シンボルと文字列
3.6.3 a.outのまとめ
3.7 UNIX ELF
3.7.1 再配置可能ファイル
3.7.2 ELF実行可能ファイル
3.7.3 ELFのまとめ
3.8 IBM 360オブジェクト形式
3.8.1 ESDレコード
3.8.2 TXTレコード
3.8.3 RLDレコード
3.8.4 ENDレコード
3.8.5 IBM 360オブジェクト形式のまとめ
3.9 Microsoft Portable Executable形式
3.9.1 PEの特殊セクション
3.9.2 PE実行可能ファイルの実行
3.9.3 PEとCOFF
3.9.4 PEのまとめ
3.10 Intel/Microsoft OMFファイル
3.10.1 OMFレコード
3.10.2 OMFファイルの詳細
3.10.3 OMFのまとめ
3.11 オブジェクト形式の比較
演習
課題
第4章 記憶領域の割り当て
4.1 セグメントとアドレス
4.2 単純な記憶領域のレイアウト
4.3 複数の種類のセグメントタイプ
4.4 セグメントとページ整列
4.5 共通ブロックなどの特殊なセグメント
4.5.1 共通ブロック
4.5.2 C++における重複の除去
4.5.3 初期化子と終了子
4.5.4 IBMの擬似レジスタ
4.5.5 特殊なテーブル
4.5.6 x86のセグメント化記憶領域割り当て
4.6 リンカ制御スクリプト
4.7 記憶領域の割り当ての実際
4.7.1 UNIX a.outリンカの記憶領域の割り当て
4.7.2 ELFの記憶領域の割り当て
4.7.3 Windowsリンカの記憶領域の割り当て
演習
課題
第5章 シンボルの管理
5.1 バインドと名前の解決
5.2 シンボルテーブルの形式
5.2.1 モジュールテーブル
5.2.2 大域シンボルテーブル
5.2.3 シンボルの解決
5.2.4 特殊なシンボル
5.3 名前の変形
5.3.1 CとFortranの単純な名前の変形
5.3.2 C++の型エンコード:型と有効範囲
5.3.3 リンク時の型チェック
5.4 weak外部シンボルやその他のシンボル
5.5 デバッグ情報の管理
5.5.1 行番号情報
5.5.2 シンボルと変数の情報
5.5.3 実用上の問題
演習
課題
第6章 ライブラリ
6.1 ライブラリの目的
6.2 ライブラリの形式
6.2.1 オペレーティングシステムの利用
6.2.2 UNIXとMS Windowsのアーカイブファイル
6.2.3 64ビットへの拡張
6.2.4 Intel OMFライブラリ
6.3 ライブラリの作成
6.4 ライブラリの検索
6.5 性能の問題
6.6 weak外部シンボル
演習
課題
第7章 再配置
7.1 ハードウェアによる再配置とソフトウェアによる再配置
7.2 リンク時の再配置とロード時の再配置
7.3 シンボルとセグメントの再配置
7.3.1 シンボルの検索
7.4 基本的な再配置手法
7.4.1 命令の再配置
7.4.2 ECOFFのセグメント再配置
7.4.3 ELFの再配置
7.4.4 OMFの再配置
7.5 再リンク可能な出力形式と再配置可能な出力形式
7.6 その他の再配置形式
7.6.1 連鎖参照
7.6.2 ビットマップ
7.6.3 特別なセグメント
7.7 再配置の特別な場合
演習
課題
第8章 ロードとオーバレイ
8.1 基本的なロード
8.2 再配置を考慮した基本的なロード
8.3 位置独立コード
8.3.1 TSS/360の位置独立コード
8.3.2 ルーチンごとのポインタテーブル
8.3.3 TOC
8.3.4 ELFの位置独立コード
8.3.5 PICのコストと利点
8.4 ブートストラップのロード
8.5 木構造のオーバレイ
8.5.1 オーバレイの定義方法
8.5.2 オーバレイの実装
8.5.3 オーバレイの細部
8.5.4 オーバレイのまとめ
演習
課題
第9章 共有ライブラリ
9.1 バインドの時機
9.2 共有ライブラリの実際
9.3 アドレス空間の管理
9.4 共有ライブラリの構造
9.5 共有ライブラリの作成
9.5.1 ジャンプテーブルの作成
9.5.2 共有ライブラリの作成
9.5.3 スタブライブラリの作成
9.5.4 バージョンによる命名
9.6 共有ライブラリとのリンク
9.7 共有ライブラリを用いた実行
9.8 mallocハックなどの共有ライブラリに関する問題
演習
課題
第10章 動的なリンクとロード
10.1 ELFの動的リンク
10.2 ELFファイルの内容
10.3 動的リンクプログラムのロード
10.3.1 動的リンカの起動
10.3.2 ライブラリの検索
10.3.3 共有ライブラリの初期化
10.4 PLTによる手続きの遅延リンク
10.5 動的リンクのその他の特徴
10.5.1 静的な初期化
10.5.2 ライブラリのバージョン
10.6 実行時の動的ロード
10.7 Microsoftの動的リンクライブラリ
10.7.1 PEファイルにおけるインポートシンボルとエクスポートシンボル
10.7.2 遅延バインド
10.7.3 DLLとスレッド
10.8 OSF/1の擬似静的共有ライブラリ
10.9 共有ライブラリの高速化
10.10 動的リンク手法の比較
演習
課題
第11章 高度なテクニック
11.1 C++に関するテクニック
11.1.1 試行リンク
11.1.2 重複コードの除去
11.1.3 データベースによる方法
11.2 差分リンクと再リンク
11.3 リンク時ガベージコレクション
11.4 リンク時最適化
11.5 リンク時コード生成
11.5.1 リンク時のプロファイリングと測定
11.5.2 リンク時アセンブル
11.5.3 ロード時コード生成
11.6 Javaのリンクモデル
11.6.1 Javaにおけるロードとリンクの手順
演習
課題
参考文献
索引