• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
軽快なBHyVe
 

軽快なBHyVe

on

  • 2,398 views

 

Statistics

Views

Total Views
2,398
Views on SlideShare
2,003
Embed Views
395

Actions

Likes
1
Downloads
9
Comments
0

3 Embeds 395

http://d.hatena.ne.jp 283
http://orangeclover.hatenablog.com 109
https://twimg0-a.akamaihd.net 3

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

軽快なBHyVe 軽快なBHyVe Presentation Transcript

  • 軽快なBHyVe @syuu1228
  • BHyVeの現状• 独自ローダからFreeBSDカーネルをゲス トOSとしてロード&ブート出来るだけ• BIOS無いからブートローダが動かな い! →ディスクイメージから任意のOSを起 動出来ない!
  • BIOSコールの仕組みint 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 IO ハードウェア
  • KVM上でのBIOSコール int 13h ソフト割込(INT命令) CPUが割込ベクタを読む BIOS上のハンドラを実行 SeaBIOSがHWへIO IO Trap を実行 QEMU HWGuest Emulation QEMUが必要なHWエ HyperVisor ミュレーションを実施
  • SeaBIOSをBHyVeに 載せりゃええやん• 提案しました• 却下されました• GPLだからです• ( ゚∀゚)o彡゚BSDL! ( ゚∀゚)o彡゚BSDL!
  • でもBSDLでBIOSコールをエミュレートするソフトはあるよ• doscmdとか(FreeBSD上で動作)• 仮想8086モードでDOSプログラムを走 らせ、BIOSコールやDOS APIなどのソフ ト割り込みをtrap、エミュレート• 32bit実装だし移植するならHyperVisor側 に入れた方が楽
  • BIOSコールをHyperVisorで エミュレーションする Guest ソフト割込(INT命令) 割り込み TrapHyperVisor BHyVe BIOS Emulation • ソフト割り込みをTrapしてHyperVisor側 でBIOSエミュレーションを実行すれば よい?
  • Intel VTでソフト割り込みを Trapすると…• 全てのソフト割り込みがTrapされる• 多くのOSがシステムコールにソフト割 り込みを使うが、それはゲストOSで処 理して欲しいのでTrapしたくない
  • ソフト割り込みの中から BIOSコールだけを抽出• CPUのモードがリアルモードか仮想8086モードになっ た時にソフト割り込みの全Trapを有効化、プロテクト モードになった時に無効化 →BIOSエミュレーションとCPUモードのステート管理 を行う• この場合でも、リアルモードを用いるOSではシステム コールでTrapがかかってしまう• 面倒くさそう
  • ついにこの本を役立てる時が来たか(ゴゴゴゴゴゴ…
  • 軽快なBIOSコール エミュレーションの提案 ソフト割込(INT命令) CPUが割込ベクタを読む 擬似BIOS上のハンドラを実行 擬似BIOSが VMCALL Trap VMCALL命令を発行 BHyVe BIOSGuest Emulation BHyVeが必要なBIOSコールエ HyperVisor ミュレーションを実施
  • 擬似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 /* 割り込みから復帰 */
  • 軽快なBIOSコールエミュレーションでは…• 意図しないTrapを発生させない• 発生させない為に努力をする必要もな い• シンプル
  • まとめ• VM床ぶち抜き術はこんなところでも使 えて非常に有用な技術です• あなたのお持ちのVT対応パソコンも早 く床をぶち抜きたくてうずうずしてい ます、期待に応えてあげましょう
  • 何で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コール(ソフトウェア割り込みにより実現)
  • BIOSコールの仕組み ③IO命令でHWへアクセス highmem FFFF:000F ROM BIOS FFFF:0000 F000:0000②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000
  • KVM上でのBIOSコール ③IO命令をKVMでtrap、 QEMUでエミュレーション highmem FFFF:000F SeaBIOS FFFF:0000 F000:0000②割込ベクタが指してるアドレス VGAとか色々 へジャンプ! A000:0000 lowmem 0000:0400①割込ハンドラのアドレスを取得 割り込みベクタ 0000:0000