Explore "Full-Stack" in depth!

情報系の専門学校で、今は機械学習に的を絞って学習中。プログラミングを趣味でやりつつ、IT系のあらゆる知識と技術を身に付けるべく奮闘中。

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

概要

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

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

続きを読む

Seccamp2019でCコンパイラ実装に取り組みました

  • 概要
  • 応募課題について
    • 問1
    • 問2
    • 問3
  • 集中開発コースについて
  • 成果物とその進捗について
    • 事前学習期間
    • 当日
  • 総評

概要

セキュリティ・キャンプ全国大会2019に参加しました!
集中開発コースの中にある 「Y-Ⅱ Cコンパイラを自作してみよう!」のテーマに応募し、
普段独学では絶対に出来ない事を多く経験し、
尊敬する講師の方々からたくさんの事を教えて頂きました。

セキュリティ・キャンプ(以下seccamp)とは?と思った方は
こちらのページを参考にしてください!

この記事では、

  • 応募課題はどんな内容のものだったか
    • 提出したものをそのまま載せます
  • 集中開発コースはどのようなものだったか?
    • 特に Yトラックについて詳しく
  • 成果物の進捗、所感
  • 総評

という流れでお話できればと思います。

来年以降seccampに参加しようとしている方の参考になれば幸いです。

注意:応募課題についてですが、
応募時点での状況、応募時点での知識を元にした内容が書かれています。
コンパイラの知識として間違っているものもあり、
また現在はラボユースとして活動していない等、
いくつか現時点とは異なる部分もあります。ご了承ください。

続きを読む

ABC137にHaskell縛りで参加しました!

概要

随分お久しぶりですね。 数カ月ぶりに記事を更新します。
今回は ABC137 に参加しました。

Haskell縛り ということで参加した本ABCですが、
非常に有意義なものになりました。
ここでは自分が解けた問題、ギリギリ解けなかった問題について取り上げます。

Haskellで競プロをやっている人の参考になれば幸いです。


続きを読む

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

目次

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

概要

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

に述べている通りです。

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

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

docs.oracle.com

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

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

対象読者

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

IA-32 Architectures Developer's Manual 6章まとめ

目次

  • 目次
  • 概要
  • プロシージャ・コールのタイプ
  • スタック
    • スタックのセットアップ
    • スタックのアライメント
    • プロシージャのリンクに関する情報
  • CALLとRETによるプロシージャコール
    • farコール・リターン
  • 総評

概要

IA-32マニュアルを読み始めました。

無料で読めるドキュメントとしては破格の詳しさなので、 システムプログラミングに興味のある人は全員読むべきです。

今回はこのマニュアルのうち6章の内容をベースにしながら、 自身で調べたことをガンガン追記しつつ紹介していこうと思います。

続きを読む

IA-32 Architectures Developer's Manual 4章まとめ

目次

  • 目次
  • 概要
  • 基本データ型
    • 各データ型のアライメント
  • 数値のデータ型
  • ポインタ型
  • ビットフィールドデータ型
  • ストリング・データ型
  • パックドSIMD データ型
  • 総評

概要

IA-32 マニュアルを読み始めました。

無料で読めるドキュメントとしては破格の詳しさなので、 システムプログラミングに興味のある人は全員読むべきです。

今回はこのマニュアルのうち4章の内容をベースにしながら、 自身で調べたことをガンガン追記しつつ紹介していこうと思います。

続きを読む

IA-32 Architectures Developer's Manual 3章まとめ

目次

  • 目次
  • 概要
  • 動作モード
    • 保護モード・プロテクトモード
    • 実アドレスモード・リアルモード
    • SMM( System Management Mode)
  • IA-32における基本実行環境
  • メモリ構成
    • フラットメモリモデル
    • セグメント化メモリモデル
    • 動作モードとそれに対応するメモリ構成
  • 命令ポインタ

概要

IA-32 マニュアルを読み始めました。
x86ニーモニックをバイナリに変換するアセンブラ自作をやる上で、
x86アーキテクチャの理解が必要だと思ったからです。

無料で読めるドキュメントとしては破格の詳しさなので、
システムプログラミングに興味のある人は全員読むべきです。

今回はこのマニュアルのうち3章の内容をベースにしながら、
自身で調べたことをまとめて紹介していこうと思います。

続きを読む