エミュレータを作ろうsksatcybozu labs youth 7thCombNaf 3 @2018.3/25
View Slide
自己紹介sksatTwitter: @sksat_ttyGitHub: @sk2sat高2(B2ではないseccamp 2016cybozu labs youth 7thtus-uc 3thetc...
最近あった嬉しいこと
ちょこっとラボユースの話サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発掘と育成を目指すことを目的とし、学生の若手クリエイターに研究開発の機会を提供する場として、 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 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/emustarをくれると喜ぶ