Win16 перехват API

Тема в разделе "WASM.BEGINNERS", создана пользователем temperer, 22 янв 2011.

  1. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    Добрый день.
    Я изучаю функциональность одной программы. Написана под win16. Собственно все файлы NE.
    Меня ужасно интересует жизнедеятельность проги. Для этого я пытаюсь перехватить ее вызовы.
    Но у меня постоянно возникает GPF при попытке записать 5 байта длинного джампа на мой код по адресу тела функции, которую я пытаюсь перехватить.
    Например:
    addr = GetProcAddress("func1");
    _fmemcpy(addr, &jmpDataToMyFunc, 5); -> GPF
    Пытался вникнуть в детали, но не смог найти как преодолеть защищенный режим. У меня win16 и нету VirtualProtect.
    Может быть кто-нибудь подскажет, как решить проблему. Как поменять аттрибуты сегмента, что бы можно было в него писать, и вообще возможно ли это. Также может быть кто-то даст ссылку на подходящий материал. Нагуглить у меня не получилось.
     
  2. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    атрибуты секции кода на чтение-запись поменять нельзя?
     
  3. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    не могу найти как это сделать?
     
  4. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    в hiew попробуй
    он должен уметь просмотр/редактирование NE/LE..
     
  5. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    Открыл. У всех секций НЕ стоит o(7)
     
  6. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    ИДнул krnl386.dll и нашел SelectorAccessRights
    судя по всему то , что доктор прописал. Но она абсолютно недокументированная не могу найти описание параметров!
     
  7. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    Кажется даже понял как работает первый параметр селектор, второй, если 0 - считать, если нет - записать, 3 - дескриптор. вроде устанавливается, но что то потом все равно GPF
     
  8. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    Все проще пареной репы:
    делаем данные rw
    модифицируем
    возвращаем назад в code
    все
     
  9. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    AllocCSToDSAlias даёт селектор с разрешенной записью.
     
  10. temperer

    temperer New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2011
    Сообщения:
    7
    Да эта функция даже прикольнее.
    dsSel = AllocCSToDSAlias(origCS);
    ...
    FreeSelector(dsSel);
    Я решил свою задачу через SelectorAccessRights. Это позволило наступить на некоторые грабли, особенно в случае, когда необходимо модифицировать самого себя).