Добрый день. Я изучаю функциональность одной программы. Написана под win16. Собственно все файлы NE. Меня ужасно интересует жизнедеятельность проги. Для этого я пытаюсь перехватить ее вызовы. Но у меня постоянно возникает GPF при попытке записать 5 байта длинного джампа на мой код по адресу тела функции, которую я пытаюсь перехватить. Например: addr = GetProcAddress("func1"); _fmemcpy(addr, &jmpDataToMyFunc, 5); -> GPF Пытался вникнуть в детали, но не смог найти как преодолеть защищенный режим. У меня win16 и нету VirtualProtect. Может быть кто-нибудь подскажет, как решить проблему. Как поменять аттрибуты сегмента, что бы можно было в него писать, и вообще возможно ли это. Также может быть кто-то даст ссылку на подходящий материал. Нагуглить у меня не получилось.
ИДнул krnl386.dll и нашел SelectorAccessRights судя по всему то , что доктор прописал. Но она абсолютно недокументированная не могу найти описание параметров!
Кажется даже понял как работает первый параметр селектор, второй, если 0 - считать, если нет - записать, 3 - дескриптор. вроде устанавливается, но что то потом все равно GPF
Да эта функция даже прикольнее. dsSel = AllocCSToDSAlias(origCS); ... FreeSelector(dsSel); Я решил свою задачу через SelectorAccessRights. Это позволило наступить на некоторые грабли, особенно в случае, когда необходимо модифицировать самого себя).