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
250
CombNaf3.pdf
sksat
March 25, 2018
Tweet
Share
More Decks by sksat
See All by sksat
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
4
130
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
2
550
AE Rust 勉強会: github-webhook-rs
sksat
0
190
万国のサーバ管理者よ, 自動化せよ!
sksat
1
6.5k
teleka.suを支える技術
sksat
1
14k
ふつうのLinuxプログラミング-プロセスとハードウェア
sksat
25
7.3k
小型ハイブリッド用フライトシミュレータの開発
sksat
0
950
大学生でもできる!ハイブリッドロケット入門
sksat
0
1.3k
CORE 電装講習第1回
sksat
2
680
Other Decks in Programming
See All in Programming
connect-go で面倒くささと戦う / 2024-08-27 #newmo_layerx_go
izumin5210
2
640
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
1
550
大公開!iOS開発の悩みトップ5 〜iOSDC Japan 2024〜
ryunakayama
0
190
2024 컴포즈 정원사
jisungbin
0
150
今インフラ技術をイチから学び直すなら
yuhta28
1
130
Kotlin 2.0 and Beyond
antonarhipov
2
150
いまから追い上げる、Jetpack Compose トレーニング
nyafunta9858
0
530
Understand the mechanism! Let's do screenshots tests of Compose Previews with various variations / 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
sumio
3
620
Jakarta EE meets AI
ivargrimstad
0
380
Lessons by WebAssembly app in production on CDN Edge Computing Service
tetsuharuohzeki
0
210
意外とフォントが大事だった話 / Font Issues on Internationalization
fumi23
0
110
React + TextAliveでカッコいいLyric Applicatioinを作ろう!!
tosuri13
0
400
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
508
110k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
0
97
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
Facilitating Awesome Meetings
lara
49
5.9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
36
2.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
Building Your Own Lightsaber
phodgson
101
6k
Making Projects Easy
brettharned
113
5.8k
Music & Morning Musume
bryan
46
6k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Adopting Sorbet at Scale
ufuk
73
8.9k
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をくれると喜ぶ