Имеют ли собственные приложения Windows NT доступ к программным прерываниям x86 (например, int 19)?
Допустим, я хочу написать приложение или драйвер, который работает в собственном режиме Windows NT (т.е. не использует ничего, кроме функций NTDLL.DLL, и запускается при запуске ntoskrnl.exe).
Будет ли это приложение иметь доступ к прерываниям x86? IE, я мог бы написать код так:
__asm
{
int 19
}
И вернуть ли это обратно в меню загрузки? Или это все еще не разрешено даже в режиме ядра?
1 ответ
Нет. Есть несколько вещей не так с тем, что вы спрашиваете.
Прежде всего, "родные приложения" (связанные только с NTDLL.dll) по-прежнему являются приложениями пользовательского режима (кольцо 3). Они не находятся в режиме ядра (кольцо 0)- они не имеют никаких дополнительных привилегий в отношении процессора / аппаратного обеспечения. Они не запускаются автоматически при запуске ядра.
Во-вторых, о чем вы спрашиваете (например, int 19h
- Bootstrap loader) - это 16-битные вызовы BIOS, а не просто общие прерывания x86. Поскольку система работает в защищенном режиме, даже ядро не может вызвать их.
В какой-то момент процесса загрузки, при переключении в защищенный режим, ядро устанавливает собственную таблицу векторов прерываний (IVT), которая по существу переопределяет ту, которую BIOS предоставил ранее для вызовов BIOS. Единственные записи в этой таблице, которые полезны для процесса пользовательского режима, являются int 3
для точек останова и тот (номер которого ускользает от меня) для системных вызовов старого стиля (в Linux это int 80h
).
Читать: