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
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CombNaf3.pdf
sksat
March 25, 2018
More Decks by sksat
See All by sksat
同時複数機開発・運用のDevOpsサイクル高速化のための取り組み
sksat
0
1.2k
探査機自作ゼミ2025スライド
sksat
3
2k
人になにかを教えるときに考えていること(2025-05版 / VRC-LT #18)
sksat
6
2.4k
人工衛星開発のための C2A フレームワークとその開発体験
sksat
1
590
人工衛星の開発体験向上のために、ソフトウェアからできること
sksat
4
1.4k
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
6
4k
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
4
34k
AE Rust 勉強会: github-webhook-rs
sksat
0
320
万国のサーバ管理者よ, 自動化せよ!
sksat
1
8.3k
Other Decks in Programming
See All in Programming
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
110
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.3k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
170
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
RTSPクライアントを自作してみた話
simotin13
0
620
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.4k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
210
JavaDoc 再入門
nagise
1
370
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
160
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
150
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Paper Plane (Part 1)
katiecoart
PRO
0
9.1k
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をくれると喜ぶ