【#も読】オブジェクトファイル(@gorilla0513)のトップ画像

【#も読】オブジェクトファイル(@gorilla0513)

投稿日時:
ゴリラのアイコン

株式会社テックリード / 代表取締役

ゴリラ

Xアカウントリンク

「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?


こんにちは。

前回の記事ではリンカーの概要と『リンカ・ローダ実践開発テクニック』という本について紹介しました。リンカーとはなにか、どんな仕事をしているのかについてなんとなくイメージできたかなと思います。

今回はオブジェクトファイルについて少し詳細を話していきます。

オブジェクトファイルとは

前回の記事では次のように説明しました。

オブジェクトファイルはソースファイル単位で独立してコンパイルすることができ、命令やグローバルな変数、定数といったデータを持っています。

オブジェクトファイルにはフォーマットがあって、OSによって異なっています。
それぞれのフォーマットは次の表に示します。

OSフォーマット
Unix/LinuxELF(Executable and Linkable Format)
macOSMach-O(Mach object)
WindowsCOFF(Common Object File Format)

今日のウェブシステム開発ではコンテナが主流で、ELFはなんとなく知っている方もいるのではないと思うので、今回はELFについて少し掘り下げていきます。

ELF(Executable and Linkable Format)について

ELFは名前のとおり、実行・リンク可能なフォーマットとなっています。
ファイルが実行可能なのか、リンク可能なのかを判断するにはreadelfコマンドを使います。

$ readelf -h a.out | grep Type 
  Type:                              EXEC (Executable file)
$ readelf -h a.o | grep Type
  Type:                              REL (Relocatable file)

Relocatable fileは再配置(前回記事参照)情報を持ったリンク可能なファイルです。

ELFは大き分けると次の領域で構成されています。

この記事のつづきを読もう
新規登録/ログインしたらできること
  • すべての記事を制限なく閲覧可能
  • 限定イベントに参加できます
  • GitHub連携でスキルを可視化
ログイン
アカウントをお持ちでない方はこちらから新規登録