KDVMWARE
Rychlé ladění jádra operačního systému ve VMWARE
Ladění jádra pro VMWARE
Systémoví programátoři, kteří používají ladění jádra pro analýzu a hledání chyb v ovladačích a aplikacích, mají v podstatě dvě možnosti:
- Použít dvě pracovní stanice, a provést ladění jádra přes sériový port, USB port nebo 1394 (FireWire)
- Použít virtuální pracovní stanici ve VMWARE, nakonfigurovat sériový port tak, aby zapisoval data do pojmenované pipe a připojit Windbg k této pipe.
Pokud se rozhodnete pro druhou možnosti, musíte provést několik kroků,
abyste mohli ladit jádro operačního systému. Tento způsob ladění jádra je velmi pohodlný. Bohužel, sériový port ve VMWARE je emulován
se všemi limity, tedy i s malou rychlostí přenosu dat. Ve VMWARE zatím není žádný známý způsob, jak sériový port urychlit.
Skywing na svém webu publikoval způsob, jak rozběhnout rychlé ladění jádra kombinací
komunikačního kanálu VMWARE, hákování tabulky služeb procesu VMWARE-VMX.exe a injekce DLL k vytvoření rychlého
kanálu pro ladění jádra. Projekt KDVMWARE byl inspirován Skywingovou prací, a používá většinu z publikovaného know-how.
Cíl mé práce samozřejmě není publikovat Skywingovu práci pod mým jménem, ale spíše zautomatizovat a zjednodušit
ladění kádra, zvláště v případech, kdy existuje více virtuálních pracovních stanic s různými operačními systémy.
Chtěl bych také shrnout konfiguraci různých operačních systémů pro ladění jádra ve VMWARE.
Součásti projektu
KDVMWARE se skládá z tří komponent:
- Kdvmware.dll - Transportní DLL pro laděné jádro. Tato DLL je poskytovatelem rychlé komunikace mezi VMWARE a virtuální pracovní stanicí.
Musí být nakopírována na virtuální pracovní stanici do adresáře %WINDIR%\System32. Transportní DLL pro ladění jádra jsou podporovány
ve Windows XP nebo novějších.
- KdClient.dll - Tato DLL je nahrána do procesu VMWARE-VMX.exe. Jakmile je injektována do procesu,
zkontroluje konfiguraci virtuální pracovní stanice. Na základě zjištěné konfigurace buďto použije
vestavěný sériový port přesměrovaný do pojmenované pipe, nebo vytvoří položku v tabulce služeb procesu VMWARE-VMX.exe.
Pak vytvoří pojmenovanou paměťovou sekci, do které uloží jméno virtuální pracovní stanice a jméno pojmenované pipe.
Tyto informace jsou přečteny aplikací KdVMware.exe a použity ke spuštění Windbg.exe
- Kdvmware.exe - Asistent pro ladění jádra virtuální pracovní stanice. Tento EXE musí být nakopírován
na hostitelský operační systém do stejného adresáře jako KdClient.dll. Po svém spuštění sleduje běžící procesy.
Jakmile najde běžící virtuální pracovní stanici (tzn. proces pojmenovaný VMWARE-VMX.exe),
Kdvmware.exe zavede KdClient.dll do paměti procesu, přečte jméno pojmenované pipe a spustí WinDbg.exe
s příslušnými parametry. Pokud virtuální pracovní stanice skončí, Kdvmware.exe automaticky ukončí i běžící debugger.
Následující schéma zobrazuje, jak to celé funguje:
Jak to zprovoznit ?
KDVMWARE byl odzkoušen na Windows 2000, Windows XP, Windows 2003 Server, Windows Vista a Windows Seven.
Byl testován s VMWARE Workstation verze 6.5.3, a měl by fungovat i ve dřívějších verzích. Ke zprovoznění
je potřena provést následující kroky:
Virtuální pracovní stanice (Windows 2000)
- Stáhněte si KDVMWARE a uložte jej do adresáře na pevném disku, např. C:\KDVMWARE.
- Nakonfigurujte ladění jádra pro VMWARE, jak je popsáno zde. Windows 2000
nepodporuje transportní DLL pro ladění jádra, takže Kdvmware.exe musí použít vestavěno možnost konfigurace sériového portu
a přesměrování dat do pojmenované pipe.
Virtuální pracovní stanice (Windows XP)
Virtuální pracovní stanice (Windows Vista a Windows Seven)
- Stáhněte si KDVMWARE a uložte jej do adresáře na pevném disku, např. C:\KDVMWARE.
- Zvolte 32-bitovou nebo 64-bitovou verzi Kdvmware.dll podle operačního systému ve virtuální pracovní stanici a nakopírujte ji na VM do adresáře %WINDIR%\System32.
- Vytvořte novou konfiguraci s použitím Bcdedit.exe. Můžete také použít nástroj BellaVista.
bcdedit /copy {current} /d "Name of new configuration"
- Pro nově vytvořenou konfiguraci povolte test-signing mód:
bcdedit.exe /set {GUID} testsigning on
- Pro nově vytvořenou konfiguraci nastavte transportní DLL pro ladění jádra:
bcdedit.exe /set {GUID} dbgtransport kdvmware.dll
- Nepovolujte ladění jádra, protože by to přepsalo nastavení transportní DLL.
- Nevytvářejte virtuální sériový port a ujistěte se, že ve virtuální pracovní stanici nemáte žádný sériový port napojený na pojmenovanou pipe.
Nastavení virtuální pracovní stanice pro ladění přes síť (Windows 8 nebo novější)
Ladění přes síť nevyžaduje komunikaci přes rychlý port VMWARE, protože je výrazně rychlejší než základní ladění přes sériovou linku. Ke správné funkci budete potřebovat Windows 8 a WinDbg verze aspoň 6.2.9200.16384. Pro nakonfigurování proveďte následující kroky:
- Vytvořte novou konfiguraci s použitím Bcdedit.exe. Můžete také použít nástroj BellaVista.
bcdedit /copy {current} /d "Name of new configuration"
- Pro tuto novou konfiguraci nastavte ladění přes síť:
bcdedit.exe /dbgsettings NET HOSTIP:###.###.###.### PORT:50000
Poznámka: IP Adresa uvedená za "HOSTIP" je IP adresa počítače, na kterém běží debugger. Můžete zvolit jiné číslo portu.
- Zkopírujte klíč, který vypíše aplikace BCDEDIT.exe. Pokud používáte nástroj BellaVista, tento klíč je zobrazen v GUI.
- V adresáři, kde jsou uloženy soubory virtuálního počítače, vytvořte textový soubor "kdvmware-debugging-type.txt" (bez uvozovek, velikost písmen se nerozlišuje).
Jméno musí přesně souhlasit. Do souboru vložte tento text:
DEBUGGING_TYPE = "NETWORK"
NETWORK_KEY = "3qzaabt20d4f5.tn8fg2zqown7.2dw5f83zzw71.anwldd839"
NETWORK_PORT = "50000"
Nahraďte výše uvedený klíč vaším vlastním. ujistěte se, že číslo portu je správné.
- Virtuální počítač je připraven k ladění v režimu jádra.
Hostitelský operační systém (Všechny verze)
Pro hostitelský operační systém nezáleží, jaký OS běží na virtuální pracovní stanici.
Následujte tento postup:
- Ujistěte se, že máte nainstalovány Debugging Tools for Windows. Kdvmware.exe hledá Windbg.exe v adresáři C:\Program Files.
- Zvolte 32-bitovou nebo 64-bitovou verzi Kdvmware.exe, podle vašeho hostitelského operačního systému. Je doporučeno
vytvořit si zástupce na ploše nebo v panelu Rychlé Spuštění.
- Pro nastartování ladění jádra, spusťte Kdvmware.exe předtím, než je spuštěna virtuální pracovní stanice. Kdvmware.exe zobrazí ikony v systémové
oznamovací oblasti (systray) a čeká na spuštění virtuální stanice.
- Nastartujte virtuální pracovní stanici, kterou chcete ladit. Jakmile je nastartována (nebo pokud byla spuštěna v okamžiku spuštění KDVMWARE.exe),
Kdvmware zobrazí jejím jméno a také jméno pojmenované pipe. Následně spustí Windbg.exe s příslušnými parametry
takže ladění jádra je automaticky spuštěno. Virtuální pracovní stanice musí být nabootována do konfigurace pro ladění jádra.
- Pokud je virtuální pracovní stanice restartována, Kdvmware.exe automaticky připojí kernel debugger.
- Pokud je virtuální pracovní stanice vypnuta, Windbg.exe je automaticky ukončen.
- Pokud je Windbg.exe ukončen, Kdvmware.exe o tom zobrazí informaci. Dvojitým kliknutím na řádek s touto informací je možné spustit Windbg znovu.
Ke stažení
- KDVMWARE v 1.5.0.8 pro Windows 2000 - Windows Seven (32-bitové a 64-bitové, anglická verze, 188 KB)
Odkazy
Copyright (c) Ladislav Zezula 2009