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

Brug af resload_Protect#?

Teori

Der er forskellige situationer i hvilke det kan være meget nyttigt at få at vide hvornår det installerede program tilgår specifikke hukommelses områder. med resload_Protect#? funktionen er det muligt at beskytte visse hukommelses områder fra processoren at læse og/eller skrive. At beskytte betyder at ethvert forsøg på at tilgå et beskyttet område vil generere en Access Fault exception som vil resultere i en passende requester af WHDLoad. Hvis du deklærer et hukommelses område som beskyttet v.h.a. resload_Protect#? funktionen vil WHDLoad modificere de berørte page descriptors i MMU'ens oversættelses træ. Nu vil CPU'en generere en Access Fault exception hver gang et beskyttet område tilgås. Exception handleren indeni WHDLoad vil verificere grunden til exceptionen. Hvis grunden var et forsøg på at tilgå en beskyttet page men tilgangen ikke matcher det beskyttede område vil tilgangen blive emuleret og den normale program eksekvering vil fortsætte. Ellers vil WHDLoad afslutte med en passende requester. Hvis adgangen var en adgng til instruktions strømmen (f.eks. CPU'en forsøger at loade kode) vil den altid blive emuleret, eller med andre ord resload_Protect#? funktionen berører kun læsning og skrivning af data. Det faktum at enhver adgang til en beskyttet side (sidestørrelsen er i øjeblikket $1000) vil generere en access fault, selv hvis det beskyttede område kun har en længde på 1 byte, resulterer i et drastisk fald i programmets eksekverings hastighed. Specielt hvis dele af koden ligger på amme side. Hvis programmet afhænger af eksekveringshastighed er der mulighed for afvigelser i eksekveringen. Så det er muligt at nogle programmer ikke vil virke med beskyttelses featuren.

Eksempel: checksums over kode

Hvis du installerer et program ved brug af WHDLoad er du nødt til at patche de originale loader rutiner på en måde så de bruger WHDLoad til at loade spil data. Nogle spil overvåger nogle kode områder med checksum for at kontrollere at koden ikke er modificeret. Disse overvågnings rutiner kan være svære at finde men ved hjælp af resload_Protect#? functioner i WHDLoad er der ikke noget der er nemmere end dette. Alt hvad du skal gøre er at beskytte de bytes du har ændret i koden fra at blive læst. Nu vil hver rutine der prøver at lave en checksum kontrol og læse din patchede kode generere en adgangs fejl. Og du vil vide hvor rutinerne ligger.

Begrænsninger

Du må ikke beskytte den hukommelses side hvor SSP'en peger hen. Hvis du gør dette vil det resultere i en Double Bus Fault fordi CPU'en ikke vil være istand til at skrive exception stackframen. Efter en Double Bus Fault er det kun muligt at lave en reset for at fortsætte eksekveringen. WHDLoad vil kontrollere om der er en konflikt af det beskyttede område og SSP'en og afslutte hvis der er. Men dette vil ikke hjælpe hvis SSP'en ændrer sig senere hen.
[Main] [Docs] [Installs] [Search] [Team] [Guestbook] [Links]