Explore "Full-Stack" in depth!

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

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

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

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

概要 応募課題について 問1 問2 問3 集中開発コースについて 成果物とその進捗について 事前学習期間 当日 総評 概要 セキュリティ・キャンプ全国大会2019に参加しました! 集中開発コースの中にある 「Y-Ⅱ Cコンパイラを自作してみよう!」のテーマに応募し、 普…

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

概要 随分お久しぶりですね。 数カ月ぶりに記事を更新します。 今回は ABC137 に参加しました。 Haskell縛り ということで参加した本ABCですが、 非常に有意義なものになりました。 ここでは自分が解けた問題、ギリギリ解けなかった問題について取り上げます。 Hask…

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

目次 目次 概要 対象読者 本題 ELFフォーマット復習 シンボルテーブル シンボル名 name シンボルの情報を格納する info ST_BIND ST_TYPE シンボルの可視性 Other シンボルの実体 Value 総評 概要 お久しぶりです。 最近やりたい事が沢山あってブログをかけず…

C言語の文字列はどこに?-ELFバイナリに見る実行プログラムの挙動-

目次 目次 概要 .dataに格納される文字列 .dataセクションとは .rodataに書き込まれる文字列 x64命令セット、movabs おまけ:mallocによるヒープ領域のアロケート 総評 概要 ※注意! Twitterでもご指摘があったように、 本記事はC言語の習熟度が低い人間が いろ…

フルスクラッチによるセルフホスティングCコンパイラ自作日記#1

目次 目次 概要 本題 ヘッダファイル omo.h util.c token main.c logger.c 目玉:lex.c 総評 概要 以前から rui314/9ccをGoで再実装する勉強法を取っていた私ですが、 drumato.hatenablog.com に述べたように、 Cプログラミングに慣れたいということと、 単純に…

令和だし自身のやってること、やらなければいけないことを整理

目次 目次 概要 ここ最近やっていること コンパイラ自作の実践 何が足りない? AttnGAN風T2Iモデルの実装 何が足りない? 自作OS 具体的な勉強計画 コンパイラ C言語を用いた実装力 アセンブリプログラミング 最適化パス・中間表現の知識 バイナリ知識 機械学習…

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

目次 目次 概要 プロシージャ・コールのタイプ スタック スタックのセットアップ スタックのアライメント プロシージャのリンクに関する情報 CALLとRETによるプロシージャコール farコール・リターン 総評 概要 IA-32マニュアルを読み始めました。 無料で読める…

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

目次 目次 概要 基本データ型 各データ型のアライメント 数値のデータ型 整数 浮動小数点 ポインタ型 ビットフィールドデータ型 ストリング・データ型 パックドSIMD データ型 総評 概要 IA-32 マニュアルを読み始めました。 無料で読めるドキュメントとしては…

自作アセンブラを実装する上で意識することをまとめる。

目次 目次 概要 アセンブラのやること 最低限必要な知識 x86アーキテクチャの理解 ELFフォーマットの理解 本題: 詰まった箇所やTips オペコードの複雑性 総評 概要 自作アセンブラ作ってます。 アセンブラと言っても一般的に言われているように アセンブリ言…

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

目次 目次 概要 動作モード 保護モード・プロテクトモード 実アドレスモード・リアルモード SMM( System Management Mode) IA-32における基本実行環境 アドレス空間 基本プログラム実行レジスタ メモリ構成 フラットメモリモデル セグメント化メモリモデル 動…

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

目次 目次 概要 前提:セクションヘッダとは? 本題1:実装 本題2:セクション名のテーブルについて 総評 概要 drumato.hatenablog.com こちらの記事の続きです。 一応今回でreadelfは最終回になると思います。 今回はセクションヘッダを解析するコードを書きまし…

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

目次 目次 概要 前提:プログラムヘッダテーブルとは? 本題 コードリーディングで情報集め 実装 総評 概要 こちらの記事の続きです drumato.hatenablog.com ELFヘッダのあとは、 プログラムヘッダの解析 に移るのが自然な流れだと思います。 今回も ソースコー…

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

目次 目次 概要 まずはおさらい 本題:readelf 総評 概要 ELFフォーマットを理解するための試み第二弾。 こちらの記事の続きと言ってもいいです。 drumato.hatenablog.com 上記の記事には間違いが多いので注意してください。 本記事バイナリ何もわからない人に送…

exec関数で作るMarkdown内スニペット実行のアイディア

目次 目次 概要 前提知識 exec関数 本題 総評 注意点 概要 ブログを書く立場上、 プログラムとその実行結果を見せながら解説するというケースはよく発生します。 例えば、 n = 1 print(['even','odd'][n%2]) n = 0 print(['even','odd'][n%2]) #実行結果 odd ev…

readelf -hの簡易版・省略版を作成するミニ記事

目次 目次 概要 本題:ELFヘッダを見る 本題2:GoでELFヘッダを解析する 総評 概要 コンパイラ自作をとても楽しくやっている私ですが、 どうせコンパイラを作るならバイナリ生成までやらせたいものです。 もっと具体的に言うと、 アセンブリから機械語を生成する…

gccの吐くアセンブリをgoccのそれと比較する

目次 目次 概要 本題 最もシンプルなmain関数 変数宣言・四則演算 サブルーチンの定義・呼び出し 総評 概要 gccの吐き出すアセンブリを読んでいく記事です。 具体的には gocc で現在実装できている部分までを 実際にgccに吐かせる事で、 現在デファクトとされて…

1文字変数の確保・演算をgdbで

目次 目次 概要 本題 gdb-pedaを使う 総評 概要 ここらへんの記事の続きです。 drumato.hatenablog.com drumato.hatenablog.com 今回はデバッガの gdbを使いながら、 a=2;b=3;return a*b; というC( といっていいか微妙ですが) のコードをコンパイルして、 アセ…

コンパイラが構文解析してからアセンブリを出力するまで。

目次 目次 概要 本題 return 2+3*4;のケース 構文解析・ASTノード生成 中間表現への変換 レジスタの確保 アセンブリコード出力 総評 概要 この前上げたこちらの記事について、 より深く解説をしていく記事です。 drumato.hatenablog.com 具体的には、 字句解析後…

rui314さんの9ccをGoで再実装しはじめた

目次 目次 概要 本題 今できること 整数一つ・それ以上の加減算をコンパイル Token定義 Lexer定義 再帰下降構文解析器によりASTのAdd-Subノード生成 ASTノード コード生成 中間表現の変換とレジスタの選択 総評 概要 最近、こんな記事書きました。 drumato.hate…

Vimの補完プラグインであるcoc.nvimが強すぎる。

目次 目次 概要 前提 本題 インストール 設定 総評 概要 まずはつい最近上げた記事の内容を訂正する事から始めなければなりません。 drumato.hatenablog.com 私はこの記事で(記事の内容は一切訂正しないので安心してくださいね)、 個人的に自動入力系自体あま…

今の自分がコンパイラ自作の為に身につけるべき知識・技術をまとめた。

目次 目次 概要 本題 アセンブラ・アーキテクチャ コンパイラ系 実践 総評 概要 自作コンパイラは今年度(2020年3月まで)にやりたい大きな事の一つになっています。 インタプリタ作って遊んだりしていますが、 そろそろ本気で取り掛かりたいために まずはコンパ…

runcのcreateコマンドを読む。

Go

目次 目次 概要 ライセンス 前提:createコマンドとは main.go 定数 コマンド定義 create.go loadSpec() startContainer() notifySocket 総評 概要 DockerでLow-Level runtimeとして現在も活躍している opencontainers/runcの コードを読んで行きたいとおもい…

わたしのNeovim,init.vim

目次 目次 概要 本題 pastetoggle キーマッピング・Leader Plugins vim-fugitive vim-go airline denite.vim vim-easymotion vim-test init.vim 総評 概要 かなり前(2018/12/25)こんな記事を書いています。 drumato.hatenablog.com この時はほぼ使い始めたばか…

巷で噂のV言語のサンプルを読み解く。

V

目次 目次 概要 ライセンス users.v パッケージ定義・インポート 定数定義・構造体定義 Goでメソッド内変更無し main関数 generic_repository.v コメントアウト ジェネリクス concurrent_news_fetcher.v 総評 概要 巷で噂のV言語。 グローバルスコープ無し null…

最近知った深層学習系の知識(一部)をまとめる

目次 目次 概要 Conditioning Augmentation MSGAN(mode seeking GAN) バッチ正規化 AttnGANの優位性-word-level features- Gated Linear Units Residual Block 総評 概要 Cybozu Labs Youth 8th 研究生として、 今は深層生成モデルをテーマに勉強をしています…

Go Compilerの実装を読む3(SSA Readmeを読んだ編)

目次 目次 概要 ライセンス Introduction to the Go compiler's SSA backend Key Concepts Values memory types block Functions compilerの最適化 総評 概要 Go Compilerの実装を読む第3弾。 Introduction to the Go compiler's SSA backendの翻訳をしていき…

Go Compilerの実装を読む2(Readmeを読んでgcの概観をする編)

目次 目次 概要 ライセンス Introduction to the Go compiler Parsing Type-checking and AST Transformations Generic SSA Generating machine code 総評 概要 Go Compilerの実装を読もう第二弾。 今回は cmd/compileに記載された、 Introduction to the Go c…

Gopaz第二弾・前回の記事から10日間で追加した仕様紹介

目次 目次 概要 前回からの追加機能 定数定義 変数定義時に型情報を保持 関数定義 配列の要素の型チェック ハッシュのキー/値型チェック 総評 概要 Gopaz第二弾。 前回から機能拡張した部分がいくつかあるので そのお話をしていこうと思います。 前回の記事を…

生成モデルにおけるKL DivergenceとInception scoreについて調べた。

目次 目次 概要 TL;DR 前提知識・エントロピー 本題1:カルバック・ライブラー情報量とIS カルバック・ライブラー情報量 具体例 参考:StackGAN-v1における正則化項 Inception Score おまけ: Image distributionという表現 総評 概要 久しぶりの機械学習系記事で…