COBOLのビルドフロー

COBOL のビルドは「ソースコード → コンパイル → リンク → 実行」という流れで行われます。 それぞれの段階で生成される成果物を理解することが、分離作業の前提知識になります。

.cbl / .cob
ソースコード
.cpy / .cpb
コピーブック
COPY 文で展開(コンパイル前処理)
コンパイラ(cob / cobc / IGYCRCTL)
.o / .obj
オブジェクトファイル
コンパイルリスト (.lst)
※分析に使える
リンカー(ld / IEWBLINK)
リンカーマップ (.map)
※エントリポイント特定に使える
ロードモジュール
(実行可能ファイル / PDS メンバー)
実行時(JCL / シェル)
実行結果・DUMP・トレース
※構造推定に使える

各成果物の役割と特徴

成果物 拡張子の例 内容 分析への活用
ソースコード .cbl .cob .CBL 人間が書いた COBOL プログラム。IDENTIFICATION DIVISION から始まる。 そのまま読める。理想はこれが揃っている状態。
コピーブック .cpy .cpb .copy 共通定義(データ構造・定数など)を切り出したインクルードファイル。COPY 文で展開される。 データ構造の復元に不可欠。コピーブックだけ別途管理されていることも多い。
コンパイルリスト .lst コンパイル時に生成されるテキスト。展開後のソース・シンボル表・エラーリストが含まれる。 ソースに近い情報が含まれる。残っていれば分析の第一候補。
オブジェクトファイル .o .obj コンパイル後の中間形式。機械語に近いが未リンク状態。シンボル情報が残ることがある。 nmobjdump でシンボルを確認できる。
リンカーマップ .map リンク時に生成。モジュール内の各セクションのアドレスとシンボル名の対応表。 エントリポイントとモジュール境界の特定に使う。
ロードモジュール 拡張子なし / PDS メンバー 実行可能な最終成果物。複数のオブジェクトがリンクされている。 分離作業の出発点。これしかない状態からスタートすることが多い。

「ソースがない状態」で何ができて何ができないか

✅ できること
シンボル情報からプログラム名・エントリポイントを特定する。コンパイルリストが残っていればソースに近い情報を復元できる。実行・トレースにより動作を確認する。既存テストデータを使った入出力比較で等価性を検証する。
⚠️ 制約があること
逆コンパイルで得られるソースはオリジナルと完全一致しない(変数名・コメント・データ名が失われている場合がある)。コンパイラの最適化によってコード境界が変わっている可能性がある。
❌ できないこと
元のコメントやコーダーの意図を完全に復元すること。最適化で消えたコードを再現すること。コピーブックが失われている場合のデータ構造定義の完全復元。

⚠️ 逆コンパイル成果物の扱い

逆コンパイルで得られたソースコードを「元のソースコード」として扱わないでください。あくまで「動作推定の補助資料」です。改修や移植の際は必ず動作テストで等価性を確認し、コードの意味はドキュメントや担当者ヒアリングで補完してください。

主要環境の違い

環境 コンパイラ ロードモジュール形式 分析ツール
IBM z/OS メインフレーム IGYCRCTL (Enterprise COBOL) PDS / PDSE メンバー(MVS 形式) AMBLIST, DUMPDS, IPCS
GnuCOBOL (Linux/Unix) cobc ELF 形式(.so / 実行バイナリ) nm, objdump, readelf, strings
Micro Focus / ACUCOBOL cob / ccbl 独自形式(.gnt / .int / .exe) ベンダー提供のデバッガ・解析ツール

💡 環境を最初に確認する

分析手法はコンパイラ・OS・リンカーに強く依存します。作業前に「どのコンパイラでビルドされたか」「どの OS で動いているか」を確認してください。不明な場合は strings コマンドでロードモジュールの文字列を検索すると、コンパイラ名・バージョン・ビルド日時が埋め込まれていることがあります。

次の章では…

PART 03 では、分離作業の全体フロー(調査→抽出→再構成→検証)を俯瞰し、作業前に確認すべきリスクを整理します。

→ PART 03 — 分離作業の全体像とリスク把握へ