假设我想编写一个在Windows NT Native模式下运行的应用程序或驱动程序(即只使用NTDLL.DLL函数,并在ntoskrnl.exe启动时运行。
此应用程序是否可以访问x86中断? IE,我可以写这样的代码:
__asm
{
int 19
}
让它返回启动菜单?或者即使在内核模式下仍然不允许这样做?
答案 0 :(得分:4)
没有。你问的问题有些不对劲。
首先,“Native Applications”(仅与NTDLL.dll链接的那些)仍然是用户模式(Ring 3)应用程序。它们不处于内核模式(Ring 0) - 就CPU /硬件而言,它们没有额外的权限。它们在内核启动时不会自动运行。
其次,您所询问的内容(例如int 19h
- Bootstrap loader)是16位 BIOS调用,而不仅仅是一般的x86中断。由于系统在保护模式中运行,因此内核甚至都不能调用它们。
在启动过程中的某个时刻,当切换到保护模式时,内核会安装自己的中断向量表(IVT),它基本上会覆盖BIOS之前为BIOS调用提供的那个。此表中对于用户模式进程有用的唯一条目是int 3
用于断点,以及用于旧式系统调用的那个(在Linux上它是int 80h
)。 / p>
读: