Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как выполнить привилигированную функцию

Пользователи, просматривающие топик: 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.
это как-нибудь можно обойти ?
ругается на инструкцию чтения с порта
Post #: 1
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
Post #: 2
RE: Как выполнить привилигированную функцию - 2010-02-22 00:23:47.550000   
Hell Knight

Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
Огромное спасибо !
Вот интересно:
А вообще как-то возможно ли выполнение таких операци ?
Ну может при определенных условиях ?
Post #: 3
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), чтобы всякие разные приложения не творили в системе всё что им заблагорассудится.
Post #: 4
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-битной осью…
где можно прочитать про то как переходить из режима в режим ?
и что для этого нужно
Post #: 5
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. Но вообще, почитай про защищённый режим. Половина вопросов, я думаю, отпадёт.
Post #: 6
RE: Как выполнить привилигированную функцию - 2010-02-22 10:39:51.803333   
Hell Knight

Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
начал потихоньку почитывать:
С.Сорокина - Программирование драйверов и систем безопасности
что скажите об книге, если кто читал ?
Забегаю немного вперед, наверняка об этом в книге будет изложено но всё же хотелось бы услышать…

Для того что бы юзать привилегированные инструкции, мне нужно написать что-то вроде модуля, который грузится, как драйвер (раньше ОС) и потом просто вызывать этот модуль из своей программы…
это правильно ?
Post #: 7
RE: Как выполнить привилигированную функцию - 2010-02-22 11:24:19.866666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Почти. Драйвер грузится во время загрузки ОС (или после ;)). Попробуй wasm.ru
Post #: 8
RE: Как выполнить привилигированную функцию - 2010-02-22 11:36:28.860000   
Hell Knight

Сообщений: 26
Оценки: 0
Присоединился: 2007-08-09 16:44:19.366666
ну это понятно… на васме много что можно про драйверы узнать…
да в том-то и дело, что с васмом проблемы)))
он что-то в последнее время отключен…
Post #: 9
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как выполнить привилигированную функцию







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.