Explore cs in depth!

情報系の専門学校生.compiler/assembler/linker/loader/os/any lowlevel implementations

SecHack365'19に参加し,実行プログラム基盤のスクラッチ実装をした

概要

以前,このような記事を書きました.

drumato.hatenablog.com

実はこのDepthの開発活動はSecHack365という 人材育成プロジェクト に参加した中で作成した成果物であり,
またその成果物のうちごく一部を簡単に取り上げたもの,になります.
今回はSecHack365という活動がどういうものかをシェアしていけたらな,と思っています.

本記事は以下のようにして構成されています.

  • 概要
  • SecHack365の活動を振り返る
    • Sechack365とは
    • 参加の動機
      • 応募時点でやりたかったこと
      • 応募したコース
      • 最終的に達成したこと
    • 各集合回のまとめ
      • 応募時点~神奈川回
      • 北海道回まで
      • 福岡回まで
      • 宮城回まで
      • 愛媛回まで
      • 沖縄回まで
    • 全体を通して
  • 付加学習・SecHack365以外の活動
  • まとめ
続きを読む

実行プログラム作成基盤をフルスクラッチで書いた

  • 概要
  • 自己紹介
  • 本題
    • Motivation
      • motivationまとめ
    • 実装の歴史
    • 今できること
    • 困ったこと
      • ELFに蔓延るNULL三姉妹
      • そもそもやっている人がいない
  • まとめ

概要

この記事は 言語実装 Advent Calendar 2019 の8日目です.

言語処理系の理論,自作言語の実装については既に他の方が記事を出してくださると思うので,
私は 実行可能なプログラム に変換する部分を主軸に置きながら自作言語のお話をさせていただければと思います.

実装自体は以下のリンクに置いてあります.

github.com

続きを読む

glibcラッパーからLinuxのシステムコールハンドラまでを読む,まとめる

概要

IPFactory Advent Calendar 2019 一日目.
急遽開いた弊サークルのカレンダー,既に一日目が終わろうとしている.

私は日頃から勉強した内容をMarkdownにまとめ,
Gitリポジトリに保存するようにしている.

ここではそのリポジトリから,
Linuxにおけるシステムコールの流れのメモを取り出して紹介しよう.

誰も投稿しないよりよっぽどマシだし,
おそらく誰かの何かになれると思う.

要は急にやることになったので何もなかった.

続きを読む

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

概要

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

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

続きを読む

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

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

概要

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

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

この記事では、

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

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

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

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

続きを読む

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

目次

  • 目次
  • 概要
    • 対象読者
  • 本題
    • 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章の内容をベースにしながら、 自身で調べたことをガンガン追記しつつ紹介していこうと思います。

続きを読む