Поделитесь опытом использования этой функции под WinXP и Win2k, пожалуйста. Может есть доки по ее использованию? Кроме интеловских мануалов на их сайте - их я уже читал. Спасибо.
В eax - номер сервиса ядра В edx - указатель на стек с параметрами Потом вызов int 2e или sysenter Но это мало кто использует, т.к. номера сервисов отличаются от оси к оси, от билда к билду Вот кое-какая информация, остальное нужно вылавливать в сайсе http://gl00my.chat.ru/nt/int2e.txt http://z0mbie.host.sk/ntoskrnl.html
Мля не успел. 1. В 2k - используется прерывание. 2. Номера функций меняются от версии к версии, так что ... Например так: Код (Text): push arg1 arg2 arg3 ... mov eax,PROC_NUM call .SysCall add esp,argCount*4 ; bla-bla-bla .SysCall: mov edx,esp sysenter вроде так- не помню точно. Фишка в том, что адрес возврата после sysenter'a - фиксированный, указывает на ret. И еще,толком не помню, но то ли до, то ли после argX, надо скорректировать стэк, то бишь push eax.
Спасибо =) А кто-нибудь знает номер функции чтения памяти для WinXP Sp1? Или просто список номеров сервисов для этой оси?
если из собстивенного кода делается вызов, лучше использовать INT2E а не SYSENTER, чтобы возвратился на последующий код. "номер функции" следует считывать из NTDLL;