Мне надо сделать такую штуку: написать UserMode dll, которая будет экспортировать функцию для установки хуков на юзерскую функцию. Основной код написан на C++, компилируется VC - и в нём хочется загружать эту длл и при необходимость на некоторые функции из этого кода динамически вешать хуки. Пытался размещать код функции через #pragma data_seg - в сегменте данных - думал, что это поможет - а нет - Access Violation in any case (Вот, кстати, почему так???) В ring0 то я пробовал ставить хуки, опустив например бит WP в cr0, а в user mode эта привилегированная операция недопустима - тогда я и подумал, что надо как-то код функции просто разместить в таком сегменте, где будет доступна его модификация. А как это сделать - опыта не имею. Направьте меня к мануалам может быть, или объясните в двух словах... Буду признателен.
На самом деле, в винде сегмент кода и данных - это одно физическое пространство, просто как бы по разному можно смотреть на байты. Ты не заморачиваясь пишешь свою библиотеку, подрубаешь к своему приложению, берешь виртуальный адрес интересующей тебя функции Код (Text): GetProcAddress("FuncName") и обращаешься с адресом как будто у тебя там переменные обычные. Если компилер будет орать на твой сишный код, просто преобразуешь адрес к типу указатель на char, например.
Код (Text): void foo() { } void main() { unsigned * p = (unsigned *)foo; *p = 0; } - выскакивает Unhandled exception at 0x00411ce8 in test.exe: 0xC0000005: Access violation writing location 0x0041150a. Может быть я с твоих слов что-то недопонимаю?