Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
seccamp2022 成果発表
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mikiken
August 12, 2022
51
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
seccamp2022 成果発表
mikiken
August 12, 2022
More Decks by mikiken
See All by mikiken
ライフゲームの製作
mikiken
0
240
簡単な4bitCPUの作成
mikiken
0
1.4k
Webブラウザでページが表示されるまで
mikiken
0
81
Cコンパイラ自作はじめてみた
mikiken
0
270
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
So, you think you're a good person
axbom
PRO
2
2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
320
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
130
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.3k
Transcript
三木 健太郎 (@mikikeen) セキュリティ・キャンプ 全国大会 2022 L3 Cコンパイラゼミ 成果報告
• 入力として与えられたソースコードを解析、解釈し、機械語に 一対一に変換できるアセンブリファイルを出力するプログラム。 https://atmarkit.itmedia.co.jp/ait/articles/0612/02/news016_2.html
• 字句解析(tokenize): プログラム全体を、意味をもつ記号に分解する 例: • 構文解析: 字句解析で生成したトークンを解析し、トークン間の関係を表す 木構造(AST: Abstract Syntax
Tree)を構築する 例: →
• 意味解析: 構文上は正しいが、入力プログラムが意味的に間違っていないか を検査する(例: 変数に代入を行う際に、両辺で型が一致している かを調べるなど) • コード生成: 意味解析までの過程で得られた構文木をもとに、アセンブリ を出力する
• mikiken/9cc (github.com)
• 演算子(四則演算) • 演算子(比較演算) • 間接演算子 とアドレス演算子 • ローカル変数 •
文 • 文 • (ブロック/compound statements) • 引数6つまでの関数呼び出しおよび定義 • というキーワード • ポインタ型 • ポインタの加算・減算 • 演算子
• 型 • 配列(実装が間に合わなかった) • 構造体 • ︙ など、重要な機能がまだまだ不足している キャンプ終了後も開発を継続し、セルフホストを目指したい
• 日常の生活ではまず出会うことができないようなハイレベルな 方に囲まれて開発を行うことができ、良い刺激になった。 • コンパイラに型機能を導入するのに苦戦した。そのデバッグの 際に、深夜まで講師、チューター、他の参加者(L3ゼミだけでなく 他のクラスの方も含め)多くの方に手伝っていただいた。本当にあ りがとうございました。