Najpierw trzeba oszukać urządzenia: Używa się "prawdziwego" system operacyjnego aby skorzystać z gotowych już sterowników sprzętu, na które nałożone zostaną nakładki.
Następnie uruchamiane oprogramowanie: W trybie jądra systemu hosta działa tak zwany monitor jądra, który zajmuje się uruchamianiem kodu wirtualnego systemu operacyjnego i jego procesów. Robi to poprzez dynamiczne skanowanie kodu binarnego, który ma się właśnie wykonać i tłumaczeniu go na kod z podmienionymi różnymi wartościami.
Każdy oryginalny kod posiada swój odpowiednik gdzieś wewnątrz pamięci monitora jądra. W rzeczywistości procesor tam go wykonuje.
Na podmianie adresów występujących w skokach i czytań z pamięci | |
Na umieszczeniu break-pointów w rozwidleniach (skokach warunkowych) | |
Na umieszczeniu break-pointów przy napotkaniu instrukcji, które stwarzają
problemy i trzeba je emulować. Przykładowo: instrukcje sprawdzające aktualny tryb procesora, instrukcje zmieniające/odczytujące deskryptor segmentu, instrukcje zmieniające/odczytujące tablice stron |
|
Na umieszczeniu break pointów przy instrukcjach wejścia-wyjścia |
Trzeba sprawdzać, czy tłumaczone oprogramowanie nie pisze po własnym kodzie | |
Zależność od konkretnej wersji procesora, na którym będziemy uruchamiani | |
Wszystkie instrukcje sprawdzające stan procesora muszą być emulowane |
QEMU | |
WMWare | |
Plex | |
Valgrind |