Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CombNaf3.pdf

sksat
March 25, 2018

 CombNaf3.pdf

sksat

March 25, 2018
Tweet

More Decks by sksat

Other Decks in Programming

Transcript

  1. エミュレータを作ろう
    sksat
    cybozu labs youth 7th
    CombNaf 3 @2018.3/25

    View Slide

  2. 自己紹介
    sksat
    Twitter: @sksat_tty
    GitHub: @sk2sat
    高2(B2ではない
    seccamp 2016
    cybozu labs youth 7th
    tus-uc 3th
    etc...

    View Slide

  3. 最近あった嬉しいこと

    View Slide

  4. ちょこっとラボユースの話
    サイボウズ・ラボユースは、世界に通用する日本の若手エンジニアの発
    掘と育成を目指すことを目的とし、学生の若手クリエイターに研究開発の
    機会を提供する場として、 2011年3月31日に設立されました。
    ようするに
    ・ガチプロに教えてもらえる
    ・お金がもらえる
    ・OSSが開発できる
    ・柔軟な対応

    View Slide

  5. 今日の話題
    みなさん,エミュレータ作ってますか???
    教えてください!!!
    はい いいえ
    作りましょう!!!

    View Slide

  6. エミュレータ is 何

    View Slide

  7. エミュレータ
    コンピュータの機能・動作をエミュレートするソフトウェア

    View Slide

  8. 普通のプログラム
    OSが動く
    ✕ (OSの上で)
    アプリケーションが動く

    View Slide

  9. エミュレータ
    プログラム上で
    コンピュータを
    エミュレートする
    \ヨウ/

    View Slide

  10. 代表的なエミュレータ チ






    View Slide

  11. エミュレータをつくるには
    コンピュータのしくみを完全理解
    プログラムに落とし込む

    View Slide

  12. エミュレータをつくると
    コンピュータのしくみを完全理解
    エミュレータをつくる

    View Slide

  13. ゆるふわ自作エミュレータ入門

    View Slide

  14. コンピュータってどうやって動いてるの
    BIOS/UEFIがプログラムをメモリに読み出す
    ローダーが起動
    OSが起動

    View Slide

  15. これをプログラムにすればいい

    View Slide

  16. 何をエミュレートするか?
    ・いきなり
    Linux
    とかはムズカシイ
    →機能が多い・使うデバイス
    /CPU
    の機能も多い
    ・ミニマルな
    OS
    が欲しい
    →無いなら作ればいいじゃない

    View Slide

  17. 自作OS
    ・みなさん
    OS
    作ってますか?
    ・コミュニティ:
    osdev-jp
    オフ会:自作
    OS
    もくもく会(昨日あった)
    ・自作
    OS
    といえば?
    →はりぼて
    OS

    View Slide

  18. みんなだいすきはりぼてOS
    ・30日でできる!
    ・ゆるふわ
    ・小さい
    →エミュレートしやすい!

    View Slide

  19. はりぼてOS

    x86 32bit
    ・ブートメディア
    →フロッピー
    ・ページング無し

    View Slide

  20. はりぼてOSのブート
    フロッピーディスク
    (保存のアイコンではない )

    View Slide

  21. IPL:初期プログラムローダー
    おわかりいただけただろうか...

    View Slide

  22. プログラムのしくみ
    \ウマイ/
    プログラム(機械語)

    View Slide

  23. エミュレータでは...
    \ウマイ/
    プログラム(機械語)

    View Slide

  24. CPUの気持ちになる
    持ち物
    ・熱い気持ち
    ・SDM

    View Slide

  25. SDMとは?
    Intel® 64 and IA-32 architectures software developer’s manual

    View Slide

  26. 結論
    CSの全ての分野に精通したい!
    コンピュータのしくみを完全理解したい!
    エミュレータをつくりたい!
    SDMオイシイ!

    View Slide

  27. SDMムズイ
    それな.
    よくわからん疑似コードとかある
    OSやエミュレータを自作
    わかる!

    View Slide

  28. SDMを読んでイく

    View Slide

  29. 基本実行環境

    View Slide

  30. ようするに
    メモリ
    ・いっぱいデータを置いておける
    ・1つだけある
    レジスタ
    ・少しデータを置いておける
    ・いっぱいある

    View Slide

  31. プログラムに落とすと
    メモリ
    std::vector memory;
    レジスタ
    uint32_t eax, ecx, edx, ebx, esp, ebp, edi;
    実行環境はできた
    →メモリにプログラムを置く
    →実行!

    View Slide

  32. 機械語のフォーマット

    View Slide

  33. プログラムの実行

    View Slide

  34. プログラムの実行
       実行

    View Slide

  35. プログラムの実行
       実行

    View Slide

  36. プログラムの実行
       実行

    View Slide

  37. プログラムの実行
       実行

    View Slide

  38. プログラムの実行
       実行

    View Slide

  39. プログラムの実行
       実行

    View Slide

  40. プログラムの実行
       実行
    どこの機械語を実行するか?

    EIPレジスタ:プログラムカウンタ

    View Slide

  41. まとめると
    while(true){
    //
    機械語を1つ実行
    ExecOpcode(memory, eip);
    }

    View Slide

  42. まとめると
    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++;
    ...
    }

    View Slide

  43. ゆるふわに学びたい!
    かわいい!(ヽ *゚▽゚*)ノ

    View Slide

  44. 俺は熱い!!!!

    View Slide

  45. 作っているエミュレータ
    https://github.com/sk2sat/emu
    starをくれると喜ぶ

    View Slide