[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]

Brug af resload_Protect#?

Teori

Der er forskellige situationer, hvor det kan være brugbart at blive informeret om, hvornår det installerede program foretager adgange til bestemte specifikke hukommelseslokationer. Med resload_Protect#? funktionerne er det muligt at beskyttel bestemte hukommelseslokationer mod læsning og/eller skrivning af processoren. At beskytte betyder, at hver eneste adgang til et sådant beskyttet område, hvis udført, vil skabe en Access Fault undtagelse, der igen vil resultere i en passende forespørger fra WHDLoad. Hvis du deklarerer et hukommelsesområde som beskyttet vha. en resload_Protect#? funktion, vil WHDLoad modificere de påvirkede sidebeskrivere i MMU-oversættelses-træet. Ved hver adgang til den beskyttede side vil CPU'en nu skabe en Adgangsfejls-undtagelse. Den interne undtagelseshåndterer i WHDLoad vil verificere årsagen til undtagelsen. Hvis årsagen var en adgang til en beskyttet side men adgange ikke matcher det beskyttede område, vil adgangen blive emuleret, og normal programafvikling fortsætter. Ellers vil WHDLoad stoppe med en passende forespørger. Hvis adgangen var en adgang til instruktionsstrømmen (dvs. CPU'ens forsøg på at loade kode) vil den altid blive emuleret, eller med andre ord påvirker resload_Protect#? funktionerne kun læsning og skrivning af data. Det faktum, at hver adgang til en beskyttet side (sidestørrelse er pt. 4096 bytes) vil skabe en adgangsfejl, og -selv hvis det beskyttede område kun har en længde på 1 byte - resultere i en stærk neddrosling af programmets eksekveringshastighed. Især hvis dele af koden er placeret på den samme side. Hvis programmet afhænger af eksekveringshastighed, er forskellige i eksekveringen mulige. Så det er muligt, at nogle programme ikke vil virke med resload_Protect-funktionen.

Eksempel: checksummer over kode

Hvis du installerer et spil med WHDLoad er du nødt til at patche de originale loader-rutiner i spillet på en måde der gør, at disse vil bruge WHDLoad til at loade spilletes data. Nogle spil foretager checksums over bestemte kodeområder for at detektere, hvis den originale kode er blevet modificeret. Disse detekterinsrutiner kan sommetider være svære at finde. Men ved at bruge resload_Protect#? funktionerne i WHDLoad vil det være nemt. Alt du behøver at gøre, er at beskytte de bytes, du ændrede i spillets kode, mod at blive læst. Nu vil hver rutiner, der forsøger at oprette en checksum og læse din patchede kode forårsage en adgangsfejl. Og du vil dermed vide, hvor rutinen er placeret.

Begrænsninger

Du må ikke bestkytte den hukommelsesside, som SSP peger på. Hvis du gør dét, og en undtagelse opstår, vil en Dobbelt Busfejl finde sted, fordi CPU'en vil være ude af stand til at skrive undtagelses-stackrammen. Efter en Dobbelt Busfejl kan kun en reset benyttes for at fortsætte eksekveringen. WHDLoad checker for en konflikt ifm. det beskyttede område med SSP'en og terminerer hvis forholdet er tilstede. Men dette vil ikke hjælpe, hvis SSP'en ændrer sig senere.

For flere begræsninger og information, check venligst Autodoc indgangene vedr. de forskellige resload_Protect funktioner:


[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]