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

Використання функції resload_Protect *?

Теорія

Є різні ситуації, при яких  було б дуже корисно одержувати інформацію про те, що установлена програма звертається до певних ділянок пам'яті. За допомогою функції resload_Protect *?  можна захищати ділянки пам'яті від читання й/або запису процесором. Захист полягає в тому, що кожен доступ до такої захищеної ділянки ініціює виняткову подію "Помилка Доступу", яка створить відповідне вікно з повідомленням від WHDLoad. Якщо ви ставите область пам'яті під захист, використовуючи функцію resload_Protect *?, то WHDLoad змінить затронуті дескриптори сторінок у списку перекладу диспетчера пам'яті (MMU). Тепер при кожному доступі до захищеної сторінки центральний процесор буде ініціювати виняткову подію "Помилка Доступу". Оброблювач виняткових подій усередині WHDLoad перевірить його причину. Якщо причиною був доступ до захищеної сторінки, але доступ не торкнув захищену ділянку, то цей доступ буде емулюватися, і продовжиться нормальне виконання програми. Інакше, WHDLoad закінчить роботу і видасть відповідне вікно з повідомленням. Якщо відбувається доступ до інструкції (тобто центральний процесор намагається завантажити код), то це завжди буде емулюватися, або інакше кажучи, функція resload_Protect *? стосується тільки читання й запису даних. Факт в тому, що кожен доступ до захищеної сторінки (у наш час розмір сторінки дорівнює $1000), створить помилку доступу, навіть якщо захищена ділянка має довжину всього 1 байт, у результаті швидкість виконання програми дуже сильно впаде. Особливо, якщо частини коду розташовані на одній й тій же сторінці. Якщо програма залежить від швидкості виконання, те можлива різниця в виконанні. Таким чином, можливий варіант, що   деякі програми не будуть працювати з захищеною пам'яттю.

Приклад: контрольні суми по коду

Якщо ви встановлюєте гру, використовуючи WHDLoad, ви повинні виправити в грі процедури оригінальних завантажників таким чином, щоб вони використали WHDLoad, для завантаження дані ігри. Деякі ігри виконують підрахунок контрольних сум у деяких ділянках коду, щоб визначити, чи не змінювався оригінальний код. Ці підпрограми перевірки іноді дуже важко знайти. Але використання функції resload_Protect *?  в WHDLoad робить цей процес дуже простим. Усе, що ви повинні зробити, це захистити від читання ті байти, які ви змінили в коді гри. Тепер кожна підпрограма, що спробує підрахувати контрольну суму й прочитати ваш виправлений код, створить помилку доступу. І ви зможете довідаєтися де розташована ця підпрограма.

Обмеження

Ви не в якому випадку не повинні захищати ділянку пам'яті, яку вказує SSP. Якщо ви все-таки це зробили, то відбудеться Виключення, що приведе до подвійній помилці шини (Double Bus Fault), тому що центральний процесор не зможе записати stackframe виключення. Після подвійної помилки шини має бути зроблене перезавантаження для продовження роботи. WHDLoad перевіряє конфлікт захищеної ділянки з SSP і закінчує усуваючи його, але це не допомагає, якщо SSP змінюється пізніше.


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