Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
エミュレータを作ろう sksat cybozu labs youth 7th CombNaf 3 @2018.3/25
Slide 2
Slide 2 text
自己紹介 sksat Twitter: @sksat_tty GitHub: @sk2sat 高2(B2ではない seccamp 2016 cybozu labs youth 7th tus-uc 3th etc...
Slide 3
Slide 3 text
最近あった嬉しいこと
Slide 4
Slide 4 text
ちょこっとラボユースの話 サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発 掘と育成を目指すことを目的とし、学生の若手クリエイターに研究開発の 機会を提供する場として、 2011年3月31日に設立されました。 ようするに ・ガチプロに教えてもらえる ・お金がもらえる ・OSSが開発できる ・柔軟な対応
Slide 5
Slide 5 text
今日の話題 みなさん,エミュレータ作ってますか??? 教えてください!!! はい いいえ 作りましょう!!!
Slide 6
Slide 6 text
エミュレータ is 何
Slide 7
Slide 7 text
エミュレータ コンピュータの機能・動作をエミュレートするソフトウェア
Slide 8
Slide 8 text
普通のプログラム OSが動く ✕ (OSの上で) アプリケーションが動く
Slide 9
Slide 9 text
エミュレータ プログラム上で コンピュータを エミュレートする \ヨウ/
Slide 10
Slide 10 text
代表的なエミュレータ チ ョ ッ ト チ ガ ウ
Slide 11
Slide 11 text
エミュレータをつくるには コンピュータのしくみを完全理解 プログラムに落とし込む
Slide 12
Slide 12 text
エミュレータをつくると コンピュータのしくみを完全理解 エミュレータをつくる
Slide 13
Slide 13 text
ゆるふわ自作エミュレータ入門
Slide 14
Slide 14 text
コンピュータってどうやって動いてるの BIOS/UEFIがプログラムをメモリに読み出す ローダーが起動 OSが起動
Slide 15
Slide 15 text
これをプログラムにすればいい
Slide 16
Slide 16 text
何をエミュレートするか? ・いきなり Linux とかはムズカシイ →機能が多い・使うデバイス /CPU の機能も多い ・ミニマルな OS が欲しい →無いなら作ればいいじゃない
Slide 17
Slide 17 text
自作OS ・みなさん OS 作ってますか? ・コミュニティ: osdev-jp オフ会:自作 OS もくもく会(昨日あった) ・自作 OS といえば? →はりぼて OS
Slide 18
Slide 18 text
みんなだいすきはりぼてOS ・30日でできる! ・ゆるふわ ・小さい →エミュレートしやすい!
Slide 19
Slide 19 text
はりぼてOS ・ x86 32bit ・ブートメディア →フロッピー ・ページング無し
Slide 20
Slide 20 text
はりぼてOSのブート フロッピーディスク (保存のアイコンではない )
Slide 21
Slide 21 text
IPL:初期プログラムローダー おわかりいただけただろうか...
Slide 22
Slide 22 text
プログラムのしくみ \ウマイ/ プログラム(機械語)
Slide 23
Slide 23 text
エミュレータでは... \ウマイ/ プログラム(機械語)
Slide 24
Slide 24 text
CPUの気持ちになる 持ち物 ・熱い気持ち ・SDM
Slide 25
Slide 25 text
SDMとは? Intel® 64 and IA-32 architectures software developer’s manual
Slide 26
Slide 26 text
結論 CSの全ての分野に精通したい! コンピュータのしくみを完全理解したい! エミュレータをつくりたい! SDMオイシイ!
Slide 27
Slide 27 text
SDMムズイ それな. よくわからん疑似コードとかある OSやエミュレータを自作 わかる!
Slide 28
Slide 28 text
SDMを読んでイく
Slide 29
Slide 29 text
基本実行環境
Slide 30
Slide 30 text
ようするに メモリ ・いっぱいデータを置いておける ・1つだけある レジスタ ・少しデータを置いておける ・いっぱいある
Slide 31
Slide 31 text
プログラムに落とすと メモリ std::vector memory; レジスタ uint32_t eax, ecx, edx, ebx, esp, ebp, edi; 実行環境はできた →メモリにプログラムを置く →実行!
Slide 32
Slide 32 text
機械語のフォーマット
Slide 33
Slide 33 text
プログラムの実行
Slide 34
Slide 34 text
プログラムの実行 実行
Slide 35
Slide 35 text
プログラムの実行 実行
Slide 36
Slide 36 text
プログラムの実行 実行
Slide 37
Slide 37 text
プログラムの実行 実行
Slide 38
Slide 38 text
プログラムの実行 実行
Slide 39
Slide 39 text
プログラムの実行 実行
Slide 40
Slide 40 text
プログラムの実行 実行 どこの機械語を実行するか? ↓ EIPレジスタ:プログラムカウンタ
Slide 41
Slide 41 text
まとめると while(true){ // 機械語を1つ実行 ExecOpcode(memory, eip); }
Slide 42
Slide 42 text
まとめると 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++; ... }
Slide 43
Slide 43 text
ゆるふわに学びたい! かわいい!(ヽ *゚▽゚*)ノ
Slide 44
Slide 44 text
俺は熱い!!!!
Slide 45
Slide 45 text
作っているエミュレータ https://github.com/sk2sat/emu starをくれると喜ぶ