コンパイラブック

-- Views

August 17, 25

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

コンパイラブック LT こた

2.

第一回 言語処理系 勉強会 x86のレジスタ紹介

3.

x86のレジスタ紹介 raxとかrsiって なんやねん! 低レイヤを知りたい人のための Cコンパイラ作成入門 (sigbus.info)

4.

x86のレジスタ紹介 x86系CPUのネイティブコードを解析する (1/3)|CodeZine(コードジン)

5.

汎用レジスタ 名前 意味 使われ方 rax Accumulator 算術結果や関数の戻り値 rcx Counter ループ変数等のカウンタ rdx Data 計算結果データの一時記憶 rbx Base 相対メモリの基準となるアドレス rsi Source Index データを読むメモリのアドレス rdi Destination Index データを書くメモリのアドレス rsp Stack Pointer スタックの先頭を指す rbp Base Pointer ローカル変数の参照で使われる アセンブリ言語を読むための基礎知識 | 晴耕雨読 (tex2e.github.io)

6.

セグメントレジスタ > x86はプログラムやデータを「セグメント」という単位で扱う。セグメントはメモリー 内の連続した範囲 > メモリを区切っておくことで、例えば、データセグメントのバイナリを実行したりする ことを防ぐことができる。 ASCII.jp:Windowsのメモリー管理をx86の仕組みから読み解く (1/4), x86_64アーキテクチャ - ばびろん's すたっく (hatenablog.com), x86-レジスタ - ももの知恵の樹 (momo-chienoki.com)

7.

epi いわゆるプログラムカウンタ(PC)ってやつ x86-レジスタ - ももの知恵の樹 (momo-chienoki.com)

8.

eflags x86-レジスタ - ももの知恵の樹 (momo-chienoki.com)

9.

第二回 言語処理系 勉強会 プリプロセッサと インクルードガード

10.

プリプロセッサとインクルードガード

11.

プリプロセッサとインクルードガード 1973年のCコンパイラ 低レイヤを知りたい人のための Cコンパイラ作成入門 (sigbus.info)

12.

プリプロセッサとインクルードガード kushiro-ct.ac.jp/yanagawa/C-2015/20-0701/index.html

13.

プリプロセッサとインクルードガード 複数箇所でヘッダーファイル読み込むと ヘッダーファイル内の定義が重複して呼び出されることになる あとC++では #pragma once というインクルードガード みたいなやつがある (ただし標準化はされていない) 1. MY_H が定義されてるか 2. MY_H が定義する 6. #ifndef の終端 #ifdef と #ifndef と ヘッダーを書くときの定石 - y_tsuda's blog - s21g, 二重インクルードによる型の再定義を防止する方 法 (captain-cocco.com)

14.

プリプロセッサとインクルードガード gcc -E main.c でプリプロセスのみを行うことが出来る 10行のHello, WorldするだけのCプログラムでも822行 ↓ これは stdio.h を展開しているところ

15.

第三回 言語処理系 勉強会 「式」と「文」の違い

16.

「式」と「文」の違い 式 (expression) とは 値を生成するための構文 一般的に値、演算子、変数から構成される 例) 2 + 3, x * y, "hello" + "world" 式の種類 算術式、論理式、文字列式など 式の評価により値が決まる

17.

「式」と「文」の違い 文 (statement) とは 特定の処理を行うための構文 式とは異なり、値を生成するわけではない 例) x = 5, if (x > 0) {...}, while (i < 10) {...} 文の種類 代入文、制御文、関数呼び出しなど 処理の流れを制御する役割を持つ

18.

「式」と「文」の違い Rust: if式 評価したあとの値が v に代入される wandbox.org/permlink/fcbFjxzCeLZSpCfZ Python: ウォルラス演算子(セイウチ演算子) arrの長さを取得しつつ、5以上か判定 wandbox.org/permlink/j5I9etqUYzr ZJPki

19.

第四回 言語処理系 勉強会 マリオ64に学ぶ オーバーフロー

20.

マリオ64学ぶオーバーフロー スーパーマリオ 64学入門【アドベントカレンダー 2018 32日目】 | 東京工業大学デジタル創作同好会 traP

21.

マリオ64に学ぶオーバーフロー なぜWii版マリオ64で長時間放置すると足場が浮かび上がるのか(非技術者向け解説) (sbfl.net)

22.

マリオ64に学ぶオーバーフロー pannenkoek2012 - YouTube

23.

マリオ64に学ぶオーバーフロー

24.

マリオ64に学ぶオーバーフロー ファーランド (Minecraft Java Edition) 浮動小数点数演算の制約などから、ワールドの中心地から離れると ワールドの生成が異常をきたしはじめる現象 ファーランド - Minecraft Wiki (fandom.com)

25.

第六回 言語処理系 勉強会 配列のサイズ取得の 落とし穴

26.

配列のサイズ取得の落とし穴 wandbox.org/permlink/GNZXweNPRvl2H5SJ

27.

配列のサイズ取得の落とし穴 wandbox.org/permlink/HeDCodDNBK7Vdcae

28.

配列のサイズ取得の落とし穴 size = 8 はどっから来たのか? int型のポインタのサイズ(環境によるが基本4か8byte) なぜ結果が異なるのか? 関数に渡された時点で、配列がポインタとして扱われるため ↓ コンパイル時にデフォルトで警告をしてくれる wandbox.org/permlink/D5Ak8q0w0NIdR7JJ

29.

配列のサイズ取得の落とし穴 C言語では配列は最初の要素へのポインタとして実装されている p[ofs] と *(p + ofs)は等価なコード こういったより簡単に書けるようにする構文を糖衣構文(シンタックスシュガー)と呼ぶ ポインタ型の構造体からメンバーを取得するときの構文(アロー演算子)もそう wandbox.org/permlink/ J5qvdoC75Y6nU4tU