Explore "Full-Stack" in depth!

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

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

  • 概要
  • 自己紹介
  • 本題
    • 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に参加しようとしている方の参考になれば幸いです。

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

続きを読む

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

続きを読む