1

假设我想编写一个在 Windows NT Native 模式下运行的应用程序或驱动程序(即只使用 NTDLL.DLL 函数并在 ntoskrnl.exe 启动时运行。

这个应用程序可以访问 x86 中断吗?IE,我可以这样写代码:

    __asm
    {
        int 19
    }

并让它返回启动菜单?或者即使在内核模式下仍然不允许这样做?

4

1 回答 1

4

不,您的要求有一些问题。

首先,“本机应用程序”(仅与 NTDLL.dll 链接的应用程序)仍然是用户模式(环 3)应用程序。它们不在内核模式(Ring 0)——就 CPU / 硬件而言,它们没有额外的特权。它们不会在内核启动时自动运行。

其次,您要问的(例如int 19h- Bootstrap loader)是 16 位BIOS 调用,而不仅仅是一般的 x86 中断。由于系统在Protected Mode 下运行,甚至内核都不能调用这些。

在启动过程中的某个时刻,当切换到保护模式时,内核会安装自己的中断向量表 (IVT),它实际上会覆盖 BIOS 之前为 BIOS 调用提供的那个。此表中唯一对用户模式进程有用的条目是int 3断点,以及旧式系统调用(在 Linux 上是 )的条目(我忽略了它的编号int 80h)。

读:

于 2013-10-25T21:58:48.880 回答