level 10
pengzhenxx
楼主
看了有些人谈论安全问题,而不明白这仨怎么行
.
x86一共有三种工作模式:实模式,保护模式和虚拟8086模式
.
实模式:其实就是真实,实际的模式,其实这个相对于保护模式更好理解,实模式下程序可以直接控制CPU和物理内存,可以直接访问各种其他芯片比如网卡,显卡,主板BIOS等等的外部寄存器,RAM,ROM等等,其实这对其他程序甚至系统程序非常不安全,程序可以直接修改内存,甚至内存中及其重要的中断向量表,,,
比如可以直接直接修改除法益出的中断入口地址,指向你想要的程序,这样只要其他程序只要发生除法益处就会触发你写的程序,太不安全了
.
保护模式:Intel意识到实模式下,程序员实在无法无天,,就在80286时加入了保护模式和内存分页管理,由此开启了Windows时代,80286同时支持实模式和保护模式,保护模式下一般程序无法直接访问物理内存,都是经过地址转换器映射出的虚拟内存,由此像中断向量表等一些特殊的系统占用的内存被保护起来,一般程序无法直接反问,这个过程结合了内存分页管理,其实内存分页管理主要是解决DOS时代出现的内存驻留问题,内存分页管理感觉像链表,一般一段内存页4KB,一段一段的,程序真实的物理地址其实是一段一段的并不连续,Windows系统可以对每个内存页加入可读,可写,完全控制权限,,,
所以Windows系统经常出现“xx内存不能为read或write”其实就是程序访问到了被Windows系统保护的内存,而被系统强行终止了,,当然Windows的内存管理很复杂,不是一两句说得清楚的,我就不说了
.
虚拟8086模式:其实很简单,早期80286虽然支持保护模式和实模式,但不支持虚拟8086模式,要知道那时候很多程序都还是在8086下写的,你运行的保护模式的系统,但突然要运行8086实模式下的软件时,80286就只能重启,老老实实用实模式了,而支持虚拟8086模式的80386就可以直接在保护模式下模拟运行实模式下的软件效率当然高不少,,,当面IBM就是载在80286这个CPU身上,而微软则针对80386开发了Windows,从此IBM的系统基本就很少了
2015年06月03日 14点06分
1
.
x86一共有三种工作模式:实模式,保护模式和虚拟8086模式
.
实模式:其实就是真实,实际的模式,其实这个相对于保护模式更好理解,实模式下程序可以直接控制CPU和物理内存,可以直接访问各种其他芯片比如网卡,显卡,主板BIOS等等的外部寄存器,RAM,ROM等等,其实这对其他程序甚至系统程序非常不安全,程序可以直接修改内存,甚至内存中及其重要的中断向量表,,,
比如可以直接直接修改除法益出的中断入口地址,指向你想要的程序,这样只要其他程序只要发生除法益处就会触发你写的程序,太不安全了
.
保护模式:Intel意识到实模式下,程序员实在无法无天,,就在80286时加入了保护模式和内存分页管理,由此开启了Windows时代,80286同时支持实模式和保护模式,保护模式下一般程序无法直接访问物理内存,都是经过地址转换器映射出的虚拟内存,由此像中断向量表等一些特殊的系统占用的内存被保护起来,一般程序无法直接反问,这个过程结合了内存分页管理,其实内存分页管理主要是解决DOS时代出现的内存驻留问题,内存分页管理感觉像链表,一般一段内存页4KB,一段一段的,程序真实的物理地址其实是一段一段的并不连续,Windows系统可以对每个内存页加入可读,可写,完全控制权限,,,
所以Windows系统经常出现“xx内存不能为read或write”其实就是程序访问到了被Windows系统保护的内存,而被系统强行终止了,,当然Windows的内存管理很复杂,不是一两句说得清楚的,我就不说了
.
虚拟8086模式:其实很简单,早期80286虽然支持保护模式和实模式,但不支持虚拟8086模式,要知道那时候很多程序都还是在8086下写的,你运行的保护模式的系统,但突然要运行8086实模式下的软件时,80286就只能重启,老老实实用实模式了,而支持虚拟8086模式的80386就可以直接在保护模式下模拟运行实模式下的软件效率当然高不少,,,当面IBM就是载在80286这个CPU身上,而微软则针对80386开发了Windows,从此IBM的系统基本就很少了