Использование функции resload_Protect *?

Теория

Есть различные ситуации, при которых очень полезно было бы получать информацию что установленная программа обращается к определенным участкам памяти. С функцией resload_Protect *?  можно защищать участки памяти от чтения и/или записи процессором. Защита позволяет то, что каждый доступ к такой защищенной области создаст исключение / Ошибка Доступа, которое закончится соответствующим запросчиком WHDLoad. Если вы делаете область памяти защищенной, использование resload_Protect *? функции WHDLoad изменит затронутые описатели страниц в MMU списке перевода. Теперь при каждом доступе к защищенной странице центральный процессор создаст исключение / Ошибка Доступа. Исключение будет обработано WHDLoad - проверит причину исключения. Если причиной был доступ к защищенной странице(MMU), но доступ не касается защищенной области, то этот доступ будет эмулироваться, и выполнение программы продолжится. Иначе WHDLoad выйдет с соответствующим запросчиком. Если доступ был к инструкции (то есть cpu, пытается загрузить код команды), то это будет эмулироваться всегда, или другими словами функция resload_Protect *? затрагивают только чтение и запись данных. Факт, что каждый доступ к защищенной странице (размер pagesize в настоящее время равен $1000), создаст ошибку доступа, даже если защищенная область имеет только длину 1 байт, в результате, скорость выполнения программы замедлиться чрезвычайно. Особенно, если части кода расположены на той же самой странице. Если программа зависит от скорости выполнения, возможно, что программа не работает с защищенной памятью.

Пример: контрольные суммы по коду

Если вы устанавливаете игру, используя WHDLoad, вы должны исправить в игре оригинальные загрузчики, которые будет использовать WHDLoad, чтобы загрузить данные для игры. Некоторые игры выполняют подсчет контрольных сумм в некоторых областях, чтобы обнаружить, что оригинальный код был изменен. Эти подпрограммы проверки иногда очень трудно найти. Но использование функции resload_Protect *?  в WHDLoad делает этот процесс легким. Все, что вы должны сделать, должны защитить байты, которые вы изменили в коде игры от чтения. Теперь каждая подпрограмма, которая попробует сделать контрольную сумму и считать ваш исправленный код, создаст - ошибку доступа. И таким образом вы узнаете, где такая подпрограмма расположена.

Ограничения

Вы не должны защищать участок памяти, где расположен SSP. Если же вы защитили, то произойдет Исключение , и это закончится Double Bus Fault, потому что центральный процессор не способен будет записать исключение в stackframe. После Double Bus Fault должна быть произведена перезагрузка компьютера. WHDLoad проверяет конфликт защищенной области с SSP и заканчивает его , но это не помогает если SSP был изменен позже.