[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]