Всем привет! Задался целью найти заветные NTAPI-функции, которые отвечают за чтение и запись портов, маппинг физпамяти и т.д. Естественно, эти функции существуют, но они не документируются. Подтверждение тому наличие режима DEBUG в ОС Windows. К примеру, если в консоли выполнить команду debug, то можно получить возможность выполнять ряд операций, которые доступны только при наличии драйвера режима ядра. Например, чтобы считать текущее время (часы), достаточно записать в порт 70h адрес регистра 4, а затем считать порт 71h: O 70 4, затем I 71. Примеров можно привести массу, но задача стоит другая. Может кто-то подскажет, каким средствами можно перехватить команды режима debug?
V00D00 Для начала, режим DEBUG никакого отношения не имеет к консольной утилите debug. И ни то, ни другое не является подтверждением никакой из Вами перечисленных фантазий. Во-вторых, нет никаких недокументированных функций, позволяющих без участия драйвера обращаться к портам из юзермода и маппить физическую память. Есть ntvdm и режим виртуального 8086.
l_inc, я понимаю, что Debug не является консольной программой, меня интересует, каким образом через debug удается читать и записывать в порты. Какие функции и процедуры для этих целей задействуются?
V00D00 Вообще-то является. Никакие. Просто инструкции in/out. debug — 16-битная программа для dos, запускаемая в окружении ntvdm (virtual dos machine). ntvdm перехватывает привилегированные инструкции и эмулирует результат, позволяя таким образом работать приложениям, написанным для dos. Хотите точно так же работать с in/out, пишите dos-приложение. Но учтите, что никакой власти над системой или устройствами Вы не получите, т.к. любое действие контролируется ntvdm.
Выросло поколение, которое не знает ни что такое debug, ни что такое dos. А обратная совместимость осталась... http://ru.wikipedia.org/wiki/Debug
V00D00 на самом деле с помощью драйвера вы можете позволить запись в порты своему приложению, работающему в UserMod. Советую почитать литературу по защищенному режиму работы процессора.
Вообщето бездрайверные пути были, если есть дебаг привилегии, через NtSystemDebugControl, но в последних версиях винды лавочку прикрыли насколько я знаю.
semen Спасибо за информацию. Не слышал раньше. Действительно до Win2003 SP0 была в рабочем состоянии.
Помоему в х64 версиях запись в MSR накрылась, кому не лень можно проверить - вот пример кода http://www.securitytracker.com/id?1009128
l_inc Доступ к портам не только мод(CPL) определяет, но есчо и IOPL(IOPM не рассматриваем). Порт доступен, если CPL <= IOPL, да и не только порт, инструкции Cli и Sti также допускаются к исполнению. Сколько раз приходилось трейсить в олли I/O с маскировкой прерываний В ранних версиях системы был инфокласс для процессов ProcessUserModeIOPL, вот он и поднимал IOPL.