[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]
Korzystanie z resload_Protect#?
Teoria
Istnieje wiele sytuacji, w których może być bardzo użyteczne zdobycie
informacji kiedy zainstalowany program próbuje dostać się do specyficznych
obszarów pamięci.
Przy pomocy funkcji resload_Protect#?
jest możliwa chrona pewnych obszarów pamięci przed zapisem i/lub odczytem.
Ochrona oznacza tyle, że każdy dostęp do takiego chronionego obszaru wygeneruje
wyjątek błędu dostępu, który zostanie wyświetlony w stosownym komunikacie.
Jeżeli zadeklarujemy obszar pamięci jako chroniony, wykorzystanie funkcji
resload_Protect#? spowoduje, że
WHDLoad zmodyfikuje opisującą stronę pamięci w drzewo tłumaczeń MMU.
Od teraz każda próba dostępu procesora do chronionej strony pamięci wygeneruje
wyjątek błędu dostępu. WHDLoad i jego wewnętrzne procedury zweryfikują powód
wystąpienia wyjątku. Jeżeli powodem był dostęp do chronionej
strony pamięci, lecz dostęp nie odpowiada chronionemu
obszarowi, dostęp zostanie zaemulowany i program będzie wykonywany dalej.
W przeciwnym wypadku WHDLoad powróci do systemu ze stosownym komunikatem.
Jeżeli dostęp był dostępem do strumienia instrukcji (procesor próbuje
załadować kod), zawsze nastąpi emulacja. Innymi słowy funkcja
resload_Protect#? oddziałuje tylko
na odczyt i zapis danych. W rzeczywistości każdy dostęp do chronionej strony
pamięci (rozmiar strony pamięci obecnie wynosi 4096) utworzy błąd dostępu,
nawet wtedy, gdy chroniony obszar ma rozmiar 1 bajta powodując duże spowolnienie
w wykonywaniu programu. W szczególności gdy część kodu znajduje się na tej samej stronie.
Jeśli program zależy od szybkości wykonywania, są możliwe różnice w działaniu programu.
Dlatego też jest możliwe, że niektóre porogramy nie będą działały poprawnie z włączoną
opcją resload_Protect.
Przykład
Jeżeli instalujesz grę przy pomocy pakietu WHDLoad, musisz załatać oryginalny
kod wczytujący gry w taki sposób, aby skorzystał on z WHDLoada do wczytywania danych.
Niektóre gry sprawdzają sumy kontrolne pewnych obszarów kodu, aby wykryć,
czy oryginalny kod był modyfikowany. Czasami jest je ciężko znaleźć.
Wykorzystując funkcję resload_Protect#?
będzie to proste. Należy tylko chronić bajty, które się zmieniało w kodzie
gry. Od teraz każda procedura, która próbuje sprawdzić sumę kontrolną i odczytuje
Twój zmodyfikowany kod, wygeneruje błąd dostępu, a Ty już będziesz wiedział,
gdzie ona się znajduje.
Ograniczenia
Nie wolno chronić stron pamięci, na których znajdują się punkty SSP. Jeżeli tak
zrobisz, nastąpi "wyjątek", którego efektem będzie "podwójny błąd szyny", gdyż
procesor nie będzie w stanie zapisać ramki stosu wyjątku.
Po "podwójnym błędzie szyny" należy wykonać reset. WHDload
sprawdza, czy występują konflikty pomiędzy chronionymi obszarami, a SSP,
i w takim przypadku przerywa działanie, lecz to nie pomoże, jeśli SSP
zostanie zmieniony później.
Więcej informacji znajdziesz w plikach Autodoc dla poszczególnych funkcji resload_Protect:
[Main]
[Docs]
[Installs]
[Search]
[Team]
[Guestbook]
[Links]