セキュリティ・キャンプ 全国大会 2022 / L3 Cコンパイラゼミ 成果発表

2.8K Views

August 12, 22

スライド概要

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

Cコンパイラを作ったよ セキュリティ・キャンプ 2022 成果発表 L3 Cコンパイラゼミ 受講生 kanataso @kanapipopipo

2.

開発コース L3 Cコンパイラゼミ 講師 : uint256_tさんとhsjoihsさん やること : Cコンパイラを作る

3.

成果物 https://github.com/nananapo/9cc テストを除く行数 : 7777行 ↑少ない! セルフホスト達成済み!

4.

セルフホストとは ① 自作コンパイラを既存のコンパイラでコンパイルする -> 第一世代コンパイラ ② 第一世代コンパイラで自作コンパイラをコンパイルする -> 第二世代コンパイラ ③ 第二世代コンパイラで自作コンパイラをコンパイルする -> 第三世代コンパイラ 第二世代と第三世代のアセンブリが一致すればOK 4人中2人がセルフホスト達成

5.

セキュリティキャンプ以前 4/20 :「低レイヤを知りたい人のためのCコンパイラ作成入門」を 読みながら開発開始 7/14 : セルフホスト(x86_64) それ以降は少しずつ機能を追加 & リファクタリング

6.

セキュリティキャンプ 1日目 ~ 3日目昼 別のアーキテクチャにも対応してみたかったので、 QEMUでRISC-Vで動くFedoraの上でも動くようにした。 3日目昼ごろにセルフホスト達成! キャンプ数日前までに、コード生成パスを 中間表現 -> コード生成に分けていたのが効果を発揮!

7.

コンパイラにいろいろ食わせる sl: 先頭車両が高速回転してしまう https://youtu.be/VnGHP4mfMwY 乗客がHelpと叫ぶのも納得!

8.

slが暴走! 原因 : array[N][M] を array[M][N]として扱ってしまっていた sizeof(char[N][M]), sizeof(char[M][N])を gccと比較するテストはあったけれど検知できない

9.

slが暴走! 対策 : int array[N][M]; printf(“%lu”, sizeof(*array)); で検知できる プログラムは正しいので、コンパイラを作らないと変なバグを見る ことはできない

10.

コンパイラに🍩ドーナツ🍩を食べさせる ドーナツ

11.

コンパイラに🍩ドーナツ🍩を食べさせる hsjoihsさんが浮動小数点数を食べたドーナツ

12.

整数ドーナツが回転! https://youtu.be/xHNtLSEE2N0

13.

でもやっぱり浮動小数点数でドーナツを回転させたかった ・6.28, 0.07, 0.04 0.02だけパースできるように ・浮動小数点数演算は頑張って対応する

14.

floatドーナツを動かしたらターミナルがこわれた

15.

何かがおかしいが、floatドーナツが回転! https://youtu.be/LtsiMgHyK8E

16.

感想 他人が書いたコードをコンパイルするのはつら楽しい ・全然コンパイルできない ・実装していない機能が分かる ・バグが分かる ・変な挙動をして面白い

17.

他人のプログラムをコンパイルするのは難しい でもセルフホストはできる セルフホストは簡単(説)

18.

おわり セルフホストは通過地点! Cコンパイラ開発の旅はまだ終わらない... 講師、チューターの方々、長い期間ありがとうございました。