対象試験と出題頻度
オブジェクトコードは、ITパスポート・基本情報技術者・応用情報技術者のすべてで出題されるテーマです。
「コンパイラの最適化」や「リバースエンジニアリング」などの問題で前提知識として登場するほか、ソースコードやロードモジュールとの違いを正確に区別できるかが問われます。
詳細をクリックして確認
ITパスポート
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
情報処理試験を勉強していると、「オブジェクトコードって、機械語のこと?プログラムのこと?何が何だかわからない」と混乱しがちです。
オブジェクトコード(Object Code)とは、一言で言うと
「コンパイラやアセンブラがソースコードを翻訳して生成した、コンピュータが解釈できる機械語のプログラム」
のことです。
イメージとしては、「日本語の原稿を翻訳者が英語に訳した翻訳済み原稿」です。
原稿(ソースコード)のままでは海外の読者(CPU)には伝わりません。翻訳者(コンパイラ)が読者の言語に訳した成果物がオブジェクトコードにあたります。
ただし、この翻訳済み原稿だけでは本として出版できず、索引や表紙をつける製本作業(リンク処理)を経て初めて読者に届く。ここが後述するロードモジュールとの違いです。
📊 オブジェクトコードの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Object Code(object=目的、対象) |
| 別名 | 目的プログラム、目的コード、オブジェクトモジュール |
| 対になる用語 | ソースコード(翻訳前の人間が読める原文) |
| 生成するソフト | コンパイラ(高水準言語から変換)、アセンブラ(アセンブリ言語から変換) |
解説
コンピュータのCPUが直接実行できるのは0と1で構成された機械語だけです。人間が読み書きしやすい高水準言語(C言語、Javaなど)で書いたテキスト、つまりソースコードは、そのままではCPUに通じません。
この「人間の言葉」を「CPUの言葉」に翻訳した結果が、オブジェクトコードです。
オブジェクトコードが生成されるまで
コンパイラは、ソースコードに対して字句解析・構文解析・意味解析・最適化・コード生成という一連の処理を行い、最終的にオブジェクトコードを出力します。
🔄 ソースコードから実行可能ファイルまでの流れ
(人間が記述)
(翻訳処理)
コード
(機械語)
(ライブラリ結合)
モジュール
(実行可能ファイル)
▶ 各段階の詳細(クリックで展開)
① ソースコード → コンパイラ
人間が書いたプログラム(.c、.java などのテキストファイル)をコンパイラに渡します。コンパイラ内部では字句解析でトークンに分割し、構文解析で文法をチェックし、最適化で無駄な処理を省き、最終的にコード生成で機械語に変換します。
② コンパイラ → オブジェクトコード
コンパイラの出力がオブジェクトコード(.o、.obj ファイル)です。機械語で記述されていますが、この時点ではまだ外部のライブラリや他のモジュールとの結合が済んでいません。単体では実行できないのが特徴です。
③ オブジェクトコード → リンカ → ロードモジュール
リンカ(リンケージエディタ)が、複数のオブジェクトコードや必要なライブラリを結合して、実行可能ファイル(ロードモジュール、.exeなど)を生成します。これをローダがメモリに読み込むことで、プログラムが実行されます。
混同しやすい3つの用語の整理
ここだけは確実に押さえてください。ソースコード・オブジェクトコード・ロードモジュールは「工程の順番」で整理すると混同しなくなります。
| 用語 | 意味 | 記述形式 | 単体で実行 |
|---|---|---|---|
| ソースコード | 人間がプログラミング言語で書いた原文 | 高水準言語 | 不可 |
| オブジェクト コード |
コンパイラが翻訳した機械語プログラム(ライブラリ未結合) | 機械語 | 不可 |
| ロード モジュール |
リンカがライブラリを結合して生成した実行可能ファイル | 機械語 | 可能 |
最大のポイントは「オブジェクトコードは機械語だが、まだ単体では動かない」という点です。ライブラリとの結合を経てロードモジュールになって初めて実行可能になります。
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 オブジェクトコードの核心を3行で
・コンパイラがソースコードを翻訳して生成した機械語プログラム
・ライブラリとの結合(リンク)前なので、単体ではまだ実行できない
・リンカで結合するとロードモジュール(実行可能ファイル)になる
試験ではこう出る!
オブジェクトコードは、単体の定義を問う問題よりも、コンパイラの処理やプログラム実行の流れに関する問題の中で登場するケースが中心です。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| IP H25春 問60 |
「コンピュータで実行可能な形式の機械語プログラムを何と呼ぶか」を問う問題。 | ・正解はロードモジュール ・オブジェクトモジュールは「リンク前」なので不正解 ・この区別が最頻出 |
| FE H28春 午前 問19 |
「コンパイラにおける最適化の説明として適切なものはどれか」を問う問題。 | ・最適化=実行効率の高いオブジェクトコードを生成する処理 ・FE H26春 問18、FE R2免除 問18 でも同一テーマが出題 |
| FE H27秋 午前 問49 |
「ソースコードやオブジェクトコードを解析して仕様と設計の情報を取り出す手法」を問う問題。 | ・正解はリバースエンジニアリング ・オブジェクトコードが「解析対象」として登場 |
📝 IPA試験での出題パターン
パターン1:「コンパイラの最適化の説明を選べ」
FEで繰り返し出題されている定番問題。「ソースコードを解析して実行効率の高いオブジェクトコードを生成する」が正解の核心。選択肢には「インタプリタ用の中間コードを生成する」「クロスコンパイラの説明」がひっかけとして並ぶ。
パターン2:「実行可能なプログラムの呼び名を選べ」
IP H25春 問60のように、オブジェクトモジュールとロードモジュールの区別を問う形式。「実行可能」と問われたらロードモジュール、「コンパイル後・リンク前」と問われたらオブジェクトコードが正解。
試験ではここまででOKです。「コンパイラの出力=オブジェクトコード」「リンカの出力=ロードモジュール」という2点を押さえれば得点できます。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. コンパイラがソースコードを翻訳した結果として生成される、機械語で記述されたプログラムの呼び名として、最も適切なものはどれでしょうか?
- A. ロードモジュール ― リンカがオブジェクトモジュールとライブラリを結合して生成した、CPUが直接実行できる形式のファイル。
- B. ソースコード ― 人間が読めるプログラミング言語の文法に従って記述された、翻訳前のプログラムの原文テキスト。
- C. オブジェクトコード ― コンパイラがソースコードを翻訳して出力した機械語プログラムで、ライブラリとの結合前の状態のもの。
正解と解説を見る
正解:C
解説:
コンパイラがソースコードを機械語に翻訳した出力結果がオブジェクトコード(目的プログラム)です。この時点ではライブラリとの結合が行われていないため、単体では実行できません。
選択肢Aのロードモジュールは、リンカがオブジェクトコードとライブラリを結合した後に生成される実行可能ファイルです。「コンパイラが生成した」ものではなく「リンカが生成した」ものなので該当しません。選択肢Bのソースコードは、コンパイラに入力される翻訳前のテキストであり、コンパイラの出力結果ではありません。
よくある質問(FAQ)
Q. オブジェクトコードとバイナリコードは同じものですか?
厳密には異なります。バイナリコードは「0と1で構成されたデータ全般」を指す広い用語で、画像ファイルや音声ファイルもバイナリコードに含まれます。一方、オブジェクトコードは「コンパイラの翻訳結果として生成された機械語プログラム」を指す、プログラミング文脈に限定された用語です。試験では「バイナリコード=機械語の別名」として出題されることもあるため、文脈に応じて判断してください。
Q. インタプリタ方式の場合、オブジェクトコードは生成されますか?
原則として生成されません。インタプリタはソースコードを1行ずつ読み取りながら逐次実行するため、コンパイラのようにオブジェクトコードファイルを作成する工程がありません。ただし、Javaのように「まずバイトコード(中間コード)にコンパイルし、JVM上でインタプリタやJITコンパイラが実行する」という混合方式も存在します。試験範囲では「コンパイラ方式ならオブジェクトコードが生成される、インタプリタ方式なら逐次実行」と割り切って構いません。
Q. 逆アセンブルとリバースエンジニアリングの違いは何ですか?
逆アセンブルは、オブジェクトコード(機械語)をアセンブリ言語に変換する具体的な技術操作です。リバースエンジニアリングは、ソフトウェアの仕様や設計を既存の成果物から逆に解明するプロセス全体を指す、より広い概念です。逆アセンブルはリバースエンジニアリングで用いられる手段の一つという関係です。FE H24秋 午前 問43では「新種ウイルスの動作を解明するために逆アセンブルを行う」という内容が出題されています。