Write Protection and User Mode

Тема в разделе "WASM.WIN32", создана пользователем ManWithNoName, 6 ноя 2006.

  1. ManWithNoName

    ManWithNoName New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2005
    Сообщения:
    31
    Адрес:
    Москва
    Мне надо сделать такую штуку: написать UserMode dll, которая будет экспортировать функцию для установки хуков на юзерскую функцию.
    Основной код написан на C++, компилируется VC - и в нём хочется загружать эту длл и при необходимость на некоторые функции из этого кода динамически вешать хуки. Пытался размещать код функции через #pragma data_seg - в сегменте данных - думал, что это поможет - а нет - Access Violation in any case :) (Вот, кстати, почему так???) В ring0 то я пробовал ставить хуки, опустив например бит WP в cr0, а в user mode эта привилегированная операция недопустима - тогда я и подумал, что надо как-то код функции просто разместить в таком сегменте, где будет доступна его модификация. А как это сделать - опыта не имею. Направьте меня к мануалам может быть, или объясните в двух словах... Буду признателен.
     
  2. nermest

    nermest New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    157
    На самом деле, в винде сегмент кода и данных - это одно физическое пространство, просто как бы по разному можно смотреть на байты. Ты не заморачиваясь пишешь свою библиотеку, подрубаешь к своему приложению, берешь виртуальный адрес интересующей тебя функции
    Код (Text):
    1.  GetProcAddress("FuncName")
    и обращаешься с адресом как будто у тебя там переменные обычные. Если компилер будет орать на твой сишный код, просто преобразуешь адрес к типу указатель на char, например.
     
  3. ManWithNoName

    ManWithNoName New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2005
    Сообщения:
    31
    Адрес:
    Москва
    Код (Text):
    1. void foo()
    2. {
    3. }
    4. void main()
    5. {
    6.     unsigned * p = (unsigned *)foo;
    7.     *p = 0;
    8. }
    - выскакивает Unhandled exception at 0x00411ce8 in test.exe: 0xC0000005: Access violation writing location 0x0041150a.
    Может быть я с твоих слов что-то недопонимаю?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    см. VirtualProtect.
     
  5. nermest

    nermest New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    157
    мдам, это я лоханулся
     
  6. ManWithNoName

    ManWithNoName New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2005
    Сообщения:
    31
    Адрес:
    Москва
    вот спасибо!