Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CombNaf3.pdf
Search
sksat
March 25, 2018
Programming
0
300
CombNaf3.pdf
sksat
March 25, 2018
Tweet
Share
More Decks by sksat
See All by sksat
同時複数機開発・運用のDevOpsサイクル高速化のための取り組み
sksat
0
120
探査機自作ゼミ2025スライド
sksat
3
860
人になにかを教えるときに考えていること(2025-05版 / VRC-LT #18)
sksat
5
1.2k
人工衛星開発のための C2A フレームワークとその開発体験
sksat
1
470
人工衛星の開発体験向上のために、ソフトウェアからできること
sksat
4
840
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
6
3.4k
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
4
29k
AE Rust 勉強会: github-webhook-rs
sksat
0
290
万国のサーバ管理者よ, 自動化せよ!
sksat
1
8k
Other Decks in Programming
See All in Programming
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
150
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
720
sbt 2
xuwei_k
0
300
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.7k
認証・認可の基本を学ぼう後編
kouyuume
0
240
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
360
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
2.9k
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
57k
How to Ace a Technical Interview
jacobian
281
24k
For a Future-Friendly Web
brad_frost
180
10k
Building Applications with DynamoDB
mza
96
6.8k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Optimizing for Happiness
mojombo
379
70k
Designing for Performance
lara
610
69k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
A better future with KSS
kneath
240
18k
It's Worth the Effort
3n
187
29k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.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をくれると喜ぶ