Re[2]: Переход на ring 0
От: ua1zcl Россия www.alexklm.ru
Дата: 13.04.02 20:50
Оценка:
Здравствуйте Владимир Гренадеров, Вы писали:

ВГ>Здравствуйте kong, Вы писали:


K>>Привет.

K>>Очень нужен пример перехода на ring0 без написания драйвера, причем как под win9x так и под Win2K. Наилучшим будет пример на С++ (Visual C++), но поможет и на асме.

ВГ>Вот пример (насчет w2k не знаю):


ВГ> push esp 0 0

ВГ> push offset thread_ring3_code
ВГ> push 0 0
ВГ> callW CreateThread ; создаем новую нить
ВГ> xchg ebx, eax ; EBX=хендл нити

ВГ> push offset context

ВГ> push ebx
ВГ> callW GetThreadContext; получаем контекст нити

ВГ> mov context._segcs, 28h ; меняем CS:EIP

ВГ> mov context._eip, offset ring0_code

ВГ> push offset context

ВГ> push ebx
ВГ> callW SetThreadContext; устанавливаем контекст

ВГ> jmp $ ; чего-то ждем


ВГ>thread_ring3_code: push 1

ВГ> call Sleep ; пауза
ВГ> jmp thread_ring3_code

ВГ>ring0_code: push ss ss ; мы в нуле!

ВГ> pop ds es
ВГ> ...


push esp 0 0
и
jmp $ ; чего-то ждем — куда это jmp — метки то здесь не видно?

— что всё значит? Синий экран не появляется?
Откуда информация? Вопрос возник потому что CreateThread требует 6 параметров, а тут их только три.
Александр
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.