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
CombNaf3.pdf
Search
sksat
March 25, 2018
Programming
0
240
CombNaf3.pdf
sksat
March 25, 2018
Tweet
Share
More Decks by sksat
See All by sksat
AE Rust 勉強会: github-webhook-rs
sksat
0
170
万国のサーバ管理者よ, 自動化せよ!
sksat
1
6.1k
teleka.suを支える技術
sksat
1
13k
ふつうのLinuxプログラミング-プロセスとハードウェア
sksat
25
7.2k
小型ハイブリッド用フライトシミュレータの開発
sksat
0
900
大学生でもできる!ハイブリッドロケット入門
sksat
0
1.2k
CORE 電装講習第1回
sksat
2
670
2019 spring WIP
sksat
1
100
Other Decks in Programming
See All in Programming
Exploring the Gradually Lost Technical Skills in the Cloud Native Era
hwchiu
2
3.9k
The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | droidcon Berlin
prof18
0
110
Prompt FlowによるLLMアプリケーション開発
yuto2000
1
1k
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
Product Management LT会_クアンド新家
shinshin
0
260
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
1.9k
3 Effective Rules for Success with Signals in Angular
manfredsteyer
PRO
0
120
【Go言語】golangci-lintの使い方
tomo1227
0
280
はしめてのプログラミングとロボット制御
watawatavoltage
0
290
AWS初心者ってどうやってAWSを学ぶ?〜アプリエンジニアがやってよかったアーキテクチャ学習方法〜
yamanashi_ren01
0
190
なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile
uenitty
29
13k
Harnessing Large Language Models for Training-free Video Anomaly Detection
tereka114
1
1.3k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
353
29k
YesSQL, Process and Tooling at Scale
rocio
166
14k
WebSockets: Embracing the real-time Web
robhawkes
59
7.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
121
18k
4 Signs Your Business is Dying
shpigford
178
21k
The MySQL Ecosystem @ GitHub 2015
samlambert
248
12k
Why Our Code Smells
bkeepers
PRO
332
56k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
A Philosophy of Restraint
colly
200
16k
Unsuck your backbone
ammeep
666
57k
Bash Introduction
62gerente
607
210k
Embracing the Ebb and Flow
colly
81
4.3k
Transcript
エミュレータを作ろう sksat cybozu labs youth 7th CombNaf 3 @2018.3/25
自己紹介 sksat Twitter: @sksat_tty GitHub: @sk2sat 高2(B2ではない seccamp 2016 cybozu
labs youth 7th tus-uc 3th etc...
最近あった嬉しいこと
ちょこっとラボユースの話 サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発 掘と育成を目指すことを目的とし、学生の若手クリエイターに研究開発の 機会を提供する場として、 2011年3月31日に設立されました。 ようするに ・ガチプロに教えてもらえる ・お金がもらえる ・OSSが開発できる ・柔軟な対応
今日の話題 みなさん,エミュレータ作ってますか??? 教えてください!!! はい いいえ 作りましょう!!!
エミュレータ is 何
エミュレータ コンピュータの機能・動作をエミュレートするソフトウェア
普通のプログラム OSが動く ✕ (OSの上で) アプリケーションが動く
エミュレータ プログラム上で コンピュータを エミュレートする \ヨウ/
代表的なエミュレータ チ ョ ッ ト チ ガ ウ
エミュレータをつくるには コンピュータのしくみを完全理解 プログラムに落とし込む
エミュレータをつくると コンピュータのしくみを完全理解 エミュレータをつくる
ゆるふわ自作エミュレータ入門
コンピュータってどうやって動いてるの BIOS/UEFIがプログラムをメモリに読み出す ローダーが起動 OSが起動
これをプログラムにすればいい
何をエミュレートするか? ・いきなり Linux とかはムズカシイ →機能が多い・使うデバイス /CPU の機能も多い ・ミニマルな OS が欲しい
→無いなら作ればいいじゃない
自作OS ・みなさん OS 作ってますか? ・コミュニティ: osdev-jp オフ会:自作 OS もくもく会(昨日あった) ・自作
OS といえば? →はりぼて OS
みんなだいすきはりぼてOS ・30日でできる! ・ゆるふわ ・小さい →エミュレートしやすい!
はりぼてOS ・ x86 32bit ・ブートメディア →フロッピー ・ページング無し
はりぼてOSのブート フロッピーディスク (保存のアイコンではない )
IPL:初期プログラムローダー おわかりいただけただろうか...
プログラムのしくみ \ウマイ/ プログラム(機械語)
エミュレータでは... \ウマイ/ プログラム(機械語)
CPUの気持ちになる 持ち物 ・熱い気持ち ・SDM
SDMとは? Intel® 64 and IA-32 architectures software developer’s manual
結論 CSの全ての分野に精通したい! コンピュータのしくみを完全理解したい! エミュレータをつくりたい! SDMオイシイ!
SDMムズイ それな. よくわからん疑似コードとかある OSやエミュレータを自作 わかる!
SDMを読んでイく
基本実行環境
ようするに メモリ ・いっぱいデータを置いておける ・1つだけある レジスタ ・少しデータを置いておける ・いっぱいある
プログラムに落とすと メモリ std::vector<uint8_t> memory; レジスタ uint32_t eax, ecx, edx, ebx,
esp, ebp, edi; 実行環境はできた →メモリにプログラムを置く →実行!
機械語のフォーマット
プログラムの実行
プログラムの実行 実行
プログラムの実行 実行
プログラムの実行 実行
プログラムの実行 実行
プログラムの実行 実行
プログラムの実行 実行
プログラムの実行 実行 どこの機械語を実行するか? ↓ EIPレジスタ:プログラムカウンタ
まとめると while(true){ // 機械語を1つ実行 ExecOpcode(memory, eip); }
まとめると void ExecOpcode(Memory& memory, uint32_t& eip){ uint8_t prefix, opcode, modrm,
sib; uint32_t disp32, imm32; prefix = memory[eip]; eip++; opcode = memory[eip]; eip++; ... }
ゆるふわに学びたい! かわいい!(ヽ *゚▽゚*)ノ
俺は熱い!!!!
作っているエミュレータ https://github.com/sk2sat/emu starをくれると喜ぶ