12

从操作系统和硬件的角度来看,我知道实模式和保护模式之间的区别。

但我想弄清楚程序“知道”实模式还是保护模式?在查看源代码/目标代码时,你怎么能说它是一个实模式程序?

寻找答案,我能想到的只是“实模式”程序使用 BIOS 子例程和 OS 子例程,而“保护模式”程序仅使用 OS 子例程。指令代码不同,因为寄存器的操作码不同并且偏移地址的长度不同。是否有任何其他功能可以区分真实模式和保护模式程序?

4

3 回答 3

12

“实模式”程序使用 BIOS 子程序和 OS 子程序,而“保护模式”程序仅使用 OS 子程序。

指令代码不同,因为寄存器的操作码不同并且偏移地址的长度不同。

于 2013-10-28T09:16:48.623 回答
9

在查看源代码/目标代码时,你怎么能说它是一个实模式程序?

如果物理内存和虚拟内存之间存在直接映射(一对一),则程序正在实模式下执行。更准确地说,由于虚拟内存未在实模式下激活,程序以 16 位模式执行,其中源代码/目标代码“查看”的每个地址都是 RAM 上的实际物理地址。

另一方面,保护模式启用了虚拟内存功能。因此,源代码/目标代码访问的地址之间的映射与 RAM 中访问的实际内存位置不同。

要检测这一点,您只需检查在执行源代码/目标代码时 CPU 中的分页标志是启用还是禁用。

对于基于 x86 的 CPU,您可以检查 CR0 寄存器中的值。如果 CR0 寄存器为空,则程序在实模式下运行。

于 2013-10-28T10:06:29.700 回答
8

主要区别在于 CPU 所处的模式。在保护模式下,操作系统可以使用分页和虚拟内存等功能。此外,实模式代码永远不会是 32 位,而保护模式代码可以是 16 位或 32 位。每个 x86 cpu 都以实模式启动,操作系统必须切换到保护模式。

于 2013-10-27T15:06:02.817 回答