0
軽快なBHyVe  @syuu1228
BHyVeの現状• 独自ローダからFreeBSDカーネルをゲス トOSとしてロード&ブート出来るだけ• BIOS無いからブートローダが動かな い! →ディスクイメージから任意のOSを起 動出来ない!
BIOSコールの仕組みint 13h   ソフト割込(INT命令)          CPUが割込ベクタを読む          BIOS上のハンドラを実行                    IO                 ハードウェア
KVM上でのBIOSコール        int 13h         ソフト割込(INT命令)                        CPUが割込ベクタを読む                        BIOS上のハンドラを実行...
SeaBIOSをBHyVeに     載せりゃええやん• 提案しました• 却下されました• GPLだからです• ( ゚∀゚)o彡゚BSDL! ( ゚∀゚)o彡゚BSDL!
でもBSDLでBIOSコールをエミュレートするソフトはあるよ• doscmdとか(FreeBSD上で動作)• 仮想8086モードでDOSプログラムを走 らせ、BIOSコールやDOS APIなどのソフ ト割り込みをtrap、エミュレート• 32b...
BIOSコールをHyperVisorで    エミュレーションする  Guest      ソフト割込(INT命令)                         割り込み TrapHyperVisor   BHyVe BIOS Emulat...
Intel VTでソフト割り込みを     Trapすると…• 全てのソフト割り込みがTrapされる• 多くのOSがシステムコールにソフト割 り込みを使うが、それはゲストOSで処 理して欲しいのでTrapしたくない
ソフト割り込みの中から    BIOSコールだけを抽出•   CPUのモードがリアルモードか仮想8086モードになっ    た時にソフト割り込みの全Trapを有効化、プロテクト    モードになった時に無効化    →BIOSエミュレーションと...
ついにこの本を役立てる時が来たか(ゴゴゴゴゴゴ…
軽快なBIOSコール    エミュレーションの提案                   ソフト割込(INT命令)                   CPUが割込ベクタを読む                  擬似BIOS上のハンドラを実行  ...
擬似BIOS上の    ハンドラ実行イメージpush dx       /* dxを退避 */ push cx      /* cxを退避 */ xor dx, dx   /* dx = 0 (0番のvmcallはBIOSコール) */ mov...
軽快なBIOSコールエミュレーションでは…• 意図しないTrapを発生させない• 発生させない為に努力をする必要もな い• シンプル
まとめ• VM床ぶち抜き術はこんなところでも使 えて非常に有用な技術です• あなたのお持ちのVT対応パソコンも早 く床をぶち抜きたくてうずうずしてい ます、期待に応えてあげましょう
何でBIOS無いと             ブートローダ動かんの•   GRUBの例    /*      * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into ...
BIOSコールの仕組み  ③IO命令でHWへアクセス                   highmem                             FFFF:000F                  ROM BIOS   FFF...
KVM上でのBIOSコール   ③IO命令をKVMでtrap、  QEMUでエミュレーション                      highmem                                FFFF:000F      ...
軽快なBHyVe
Upcoming SlideShare
Loading in...5
×

軽快なBHyVe

2,370

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,370
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "軽快なBHyVe"

    1. 1. 軽快なBHyVe @syuu1228
    2. 2. BHyVeの現状• 独自ローダからFreeBSDカーネルをゲス トOSとしてロード&ブート出来るだけ• BIOS無いからブートローダが動かな い! →ディスクイメージから任意のOSを起 動出来ない!
    3. 3. BIOSコールの仕組みint 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 IO ハードウェア
    4. 4. KVM上でのBIOSコール int 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 SeaBIOSがHWへIO IO Trap を実行 QEMU HWGuest Emulation QEMUが必要なHWエ HyperVisor ミュレーションを実施
    5. 5. SeaBIOSをBHyVeに 載せりゃええやん• 提案しました• 却下されました• GPLだからです• ( ゚∀゚)o彡゚BSDL! ( ゚∀゚)o彡゚BSDL!
    6. 6. でもBSDLでBIOSコールをエミュレートするソフトはあるよ• doscmdとか(FreeBSD上で動作)• 仮想8086モードでDOSプログラムを走 らせ、BIOSコールやDOS APIなどのソフ ト割り込みをtrap、エミュレート• 32bit実装だし移植するならHyperVisor側 に入れた方が楽
    7. 7. BIOSコールをHyperVisorで エミュレーションする Guest ソフト割込(INT命令) 割り込み TrapHyperVisor BHyVe BIOS Emulation • ソフト割り込みをTrapしてHyperVisor側 でBIOSエミュレーションを実行すれば よい?
    8. 8. Intel VTでソフト割り込みを Trapすると…• 全てのソフト割り込みがTrapされる• 多くのOSがシステムコールにソフト割 り込みを使うが、それはゲストOSで処 理して欲しいのでTrapしたくない
    9. 9. ソフト割り込みの中から BIOSコールだけを抽出• CPUのモードがリアルモードか仮想8086モードになっ た時にソフト割り込みの全Trapを有効化、プロテクト モードになった時に無効化 →BIOSエミュレーションとCPUモードのステート管理 を行う• この場合でも、リアルモードを用いるOSではシステム コールでTrapがかかってしまう• 面倒くさそう
    10. 10. ついにこの本を役立てる時が来たか(ゴゴゴゴゴゴ…
    11. 11. 軽快なBIOSコール エミュレーションの提案 ソフト割込(INT命令) CPUが割込ベクタを読む 擬似BIOS上のハンドラを実行 擬似BIOSが VMCALL Trap VMCALL命令を発行 BHyVe BIOSGuest Emulation BHyVeが必要なBIOSコールエ HyperVisor ミュレーションを実施
    12. 12. 擬似BIOS上の ハンドラ実行イメージpush dx /* dxを退避 */ push cx /* cxを退避 */ xor dx, dx /* dx = 0 (0番のvmcallはBIOSコール) */ mov cx, 13h /* cx = 13h (int 13hである事を通知) */ vmcall /* HyperVisorへVMExit、BIOSエミュレーション */ pop cx /* cxを復帰 */ pop dx /* dxを復帰 */ iret /* 割り込みから復帰 */
    13. 13. 軽快なBIOSコールエミュレーションでは…• 意図しないTrapを発生させない• 発生させない為に努力をする必要もな い• シンプル
    14. 14. まとめ• VM床ぶち抜き術はこんなところでも使 えて非常に有用な技術です• あなたのお持ちのVT対応パソコンも早 く床をぶち抜きたくてうずうずしてい ます、期待に応えてあげましょう
    15. 15. 何でBIOS無いと ブートローダ動かんの• GRUBの例 /* * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory * Call with %ah = 0x42 * %dl = drive number * %ds:%si = segment:offset of disk address packet * Return: * %al = 0x0 on success; err code on failure */ movb $0x42, %ah int $0x13   ↑BIOSコール(ソフトウェア割り込みにより実現)
    16. 16. BIOSコールの仕組み ③IO命令でHWへアクセス highmem FFFF:000F ROM BIOS FFFF:0000 F000:0000②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000
    17. 17. KVM上でのBIOSコール ③IO命令をKVMでtrap、 QEMUでエミュレーション highmem FFFF:000F SeaBIOS FFFF:0000 F000:0000②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×