从操作系统和硬件的角度来看,我知道真实模式和保护模式之间的区别。
但是我想弄清楚一个程序对真实模式或保护模式“了解”些什么?在查看源代码/目标代码时,如何判断它是否是实模式程序?
在寻找答案时,我所能想到的就是“实模式”程序使用BIOS子例程和OS子例程,而“保护模式”程序只使用OS子例程。指令代码不同,因为寄存器的操作码不同,偏移地址的长度也不同。还有没有其他功能来区分真实模式和保护模式的程序?
发布于 2013-10-28 17:16:49
“实模式”程序使用BIOS子例程和OS子例程,而“保护模式”程序只使用OS子例程。
指令代码不同,因为寄存器的操作码不同,偏移地址的长度也不同。
发布于 2013-10-28 18:06:30
在查看源代码/目标代码时,您如何判断它是否是实模式程序?
如果在物理内存和虚拟内存之间存在直接映射(一对一),则程序在实模式下执行。更准确地说,由于虚拟内存不是在实模式下激活的,所以程序以16位模式执行,其中源代码/目标代码“查看”的每个地址都是RAM上的实际物理地址。
另一方面,保护模式启用了虚拟内存功能。因此,源代码/目标代码所访问的地址之间的映射不同于RAM中所访问的实际存储器位置。
要检测这一点,您只需在执行源代码/目标代码时检查CPU中的分页标志是启用还是禁用。
对于基于x86的CPU,您可以在CR0寄存器中检查该值。如果CR0寄存器为空,则程序在实模式下运行。
发布于 2013-10-27 23:06:03
主要区别在于cpu所处的模式。在保护模式下,操作系统可以使用分页和虚拟内存等特性。另外,实模式代码永远不是32位的,而保护模式代码可以是16位或32位。每个x86处理器都以实模式启动,操作系统必须切换到保护模式。
https://stackoverflow.com/questions/19619425
复制相似问题