Как выполнить привилигированную функцию
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Как выполнить привилигированную функцию - 2010-02-22 00:07:06.573333
|
|
|
Hell Knight
Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
|
Пишу я программу на С++, мне необходимо отключить клавиатуру, я произвел ассемблерную вставку:
__asm
{
keyb_wait:
in AL, 0x64
test AL, 010b
jnz keyb_wait
mov AL, 0x0AD
out 0x64, AL
}
выдает ошибку: Unhandled exception at 0x00413ade in move.exe: 0xC0000096: Privileged instruction. это как-нибудь можно обойти ? ругается на инструкцию чтения с порта
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 00:07:56.296666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Через WinAPI отключай http://msdn.microsoft.com/en-us/library/ms646290(VS.85).aspx
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 00:23:47.550000
|
|
|
Hell Knight
Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
|
Огромное спасибо ! Вот интересно: А вообще как-то возможно ли выполнение таких операци ? Ну может при определенных условиях ?
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 00:29:05.780000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Да, возможно. Но только если твой код выполняется в кольце защиты ring0. При наличии операционной системы это практически равноценно выполнению в режиме ядра ОС. Примерчик же этот ты взял небось из какой-нибудь DOS программы. Вот в DOS это работает. Во-первых потому что DOS вовсе не OS :) А во-вторых, потому что всё в досе выполняется в так называемом "реальном режиме" (real mode), где нет ни привилегированного кода, ни ущемлённого в правах. Но современные ОС процессор переводят в "защищённый режим" работы (protected mode), чтобы всякие разные приложения не творили в системе всё что им заблагорассудится.
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 00:47:11.656666
|
|
|
Hell Knight
Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
|
ну да… искал я как можно клавиатуру выключить :) оттуда и взял примерчик… я в нем хорошо ориентируюсь, потому что ранее с ним работал в режиме потдержки dos, ну в таком режиме смело можно работать с портами… про нулевое кольцо, как я понял нужно что-то вроде драйве забацать… который загрузится перед тем как загрузится ОС ? слышал я как-то на одном форуме про режим long mode, как я понял это 64-битный режим… из практики, как я понял виртуальные машины переключаются между этими режимами, иначе они бы не смогли бы выполнять 16-битные программы на основной 64-битной осью… где можно прочитать про то как переходить из режима в режим ? и что для этого нужно
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 01:07:36.670000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: Hell Knight про нулевое кольцо, как я понял нужно что-то вроде драйве забацать… который загрузится перед тем как загрузится ОС ? Да, надо драйвер. С одним уточнением, драйвер может подгружаться в ядро во время работы. quote:
ORIGINAL: Hell Knight где можно прочитать про то как переходить из режима в режим ? Надо почитать про protected mode. long mode – это дальнейшее развитие protected. Где читать не знаю, я бы начал с гугла ;) Но если речь идёт о том, чтобы программа работающая в user-mode (не kernel-mode) в ОС переключала режимы, то тут надо копать API. Потому как ядро не позволит процессу бесконтрольно переключать режимы. Но может предоставить API, для того чтобы приложение могло бы использовать, скажем virtual 8086. Но вообще, почитай про защищённый режим. Половина вопросов, я думаю, отпадёт.
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 10:39:51.803333
|
|
|
Hell Knight
Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
|
начал потихоньку почитывать: С.Сорокина - Программирование драйверов и систем безопасности что скажите об книге, если кто читал ? Забегаю немного вперед, наверняка об этом в книге будет изложено но всё же хотелось бы услышать… Для того что бы юзать привилегированные инструкции, мне нужно написать что-то вроде модуля, который грузится, как драйвер (раньше ОС) и потом просто вызывать этот модуль из своей программы… это правильно ?
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 11:24:19.866666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Почти. Драйвер грузится во время загрузки ОС (или после ;)). Попробуй wasm.ru
|
|
|
RE: Как выполнить привилигированную функцию - 2010-02-22 11:36:28.860000
|
|
|
Hell Knight
Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
|
ну это понятно… на васме много что можно про драйверы узнать… да в том-то и дело, что с васмом проблемы))) он что-то в последнее время отключен…
|
|
|
|
|