.png&w=3840&q=75)
【#も読】オブジェクトファイル(@gorilla0513)
投稿日時:
「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?
こんにちは。
前回の記事ではリンカーの概要と『リンカ・ローダ実践開発テクニック』という本について紹介しました。リンカーとはなにか、どんな仕事をしているのかについてなんとなくイメージできたかなと思います。
今回はオブジェクトファイルについて少し詳細を話していきます。
オブジェクトファイルとは
前回の記事では次のように説明しました。
オブジェクトファイルはソースファイル単位で独立してコンパイルすることができ、命令やグローバルな変数、定数といったデータを持っています。
オブジェクトファイルにはフォーマットがあって、OSによって異なっています。
それぞれのフォーマットは次の表に示します。
| OS | フォーマット |
|---|---|
| Unix/Linux | ELF(Executable and Linkable Format) |
| macOS | Mach-O(Mach object) |
| Windows | COFF(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は大き分けると次の領域で構成されています。