DrumatoのBlog

CS/Network/Infraが好きな桃です.

ELFバイナリに含まれるnullセクション/ヘッダの真実…?

概要

gccの吐くELFバイナリを見てみると、セクションヘッダテーブルの先頭に NULLヘッダ を見つけます。
これってなんだろう? ってずっと疑問だったのですが、今日理由がわかったのでそれについて述べたいと思います。

厳密には、 nullセクション も含まれています。
サイズが0のセクション と、それに対応する 全てのメンバが0のヘッダ が存在します。
また本記事で取り上げるnullセクション/ヘッダの意味は私がなんとなくそうじゃね?と思ったもので、
もっと歴史的な経緯、重要な意味が含まれているかも知れません。
その場合は教えて下さい。

続きを読む

オブジェクトファイルのシンボルテーブルを最低限理解する。

目次

  • 目次
    • 注意
  • 概要
    • 対象読者
  • 本題
    • ELFフォーマット復習
  • シンボルテーブル
    • シンボル名 name
    • シンボルの情報を格納する info
      • ST_BIND
      • ST_TYPE
    • シンボルの可視性 Other
    • シンボルの実体 Value
  • 総評

注意

readelf 実装 で検索すると未だに一番上に出てきてしまっているので注意.
これはelfについて全然詳しくない時期に書いたものです.
一応入門的内容についてまとめたものがあるので,
よろしければそちらを.

zenn.dev

概要

お久しぶりです。
最近やりたい事が沢山あってブログをかけずにいましたが、

に述べている通りです。

今日はELFバイナリに埋め込まれるシンボルテーブルについて軽く解説しようと思います。
自作コンパイラとかやってる人には ほぼ必須の知識ですし、
バイナリ解析( Exploitation勢含む)が好きな人には楽しいお話だと思います。

今回の記事を作成する上で、

docs.oracle.com

こちらのサイトを参考にしました。
ご存知Oracle社のドキュメントなので安心出来ますね。

解説中に登場するソースコードは基本的にGolangで記述されています。
対応する構造体等は /usr/include/elf.h に記載されているので参考にしてください。

対象読者

  • バイナリ解析大好きな人
    • でも触りはじめたばかりであまり良くわからない人
  • ネイティブコンパイラの自作やってる人
    • アセンブリコードの生成だけではなく機械語まで吐き出したい人
    • 正直 この方面の人の為の記事
続きを読む

readelf -S を簡易実装してセクションヘッダを理解する

目次

  • 目次
    • 注意
  • 概要
  • 前提:セクションヘッダとは?
  • 本題1:実装
  • 本題2:セクション名のテーブルについて
  • 総評

注意

readelf 実装 で検索すると未だに一番上に出てきてしまっているので注意.
これはelfについて全然詳しくない時期に書いたものです.
一応入門的内容についてまとめたものがあるので,
よろしければそちらを.

zenn.dev

概要

drumato.hatenablog.com

こちらの記事の続きです。

一応今回でreadelfは最終回になると思います。

今回はセクションヘッダを解析するコードを書きました。

ソースコードはこちらに。
elfパッケージを見てくださいね。

https://github.com/Drumato/goccgithub.com

続きを読む

readelf -lを簡易実装してELFフォーマットの理解を深める。

目次

  • 目次
    • 注意
  • 概要
  • 前提:プログラムヘッダテーブルとは?
  • 本題
    • コードリーディングで情報集め
    • 実装
  • 総評

注意

readelf 実装 で検索すると未だに一番上に出てきてしまっているので注意.
これはelfについて全然詳しくない時期に書いたものです.
一応入門的内容についてまとめたものがあるので,
よろしければそちらを.

zenn.dev

概要

こちらの記事の続きです

drumato.hatenablog.com

ELFヘッダのあとは、
プログラムヘッダの解析 に移るのが自然な流れだと思います。

今回も ソースコードベース で見ていくことで、
バイナリに慣れていない人にも理解できる記事を目指します。

GitHubを参照しながら読み進めて頂ければと思います。

https://github.com/Drumato/gocc/tree/master/elfgithub.com

続きを読む

バイナリ何もわからない人に送る"ソースコード視点"のELFヘッダ解説

目次

  • 目次
    • 注意
  • 概要
  • まずはおさらい
  • 本題:readelf
  • 総評

注意

readelf 実装 で検索すると未だに一番上に出てきてしまっているので注意.
これはelfについて全然詳しくない時期に書いたものです.
一応入門的内容についてまとめたものがあるので,
よろしければそちらを.

zenn.dev

概要

ELFフォーマットを理解するための試み第二弾。
こちらの記事の続きと言ってもいいです。

drumato.hatenablog.com

上記の記事には間違いが多いので注意してください。
本記事バイナリ何もわからない人に送るELFヘッダ解説が正確です。

自作readelfの完成度を高める為にも、
単純にELFを勉強する教材として優れているという事からも、
本家readelfのコードリーディングは適切だと考えました。

今回は-hオプションに限定していきます。

続きを読む