能力值:
( LV2,RANK:10 )
|
-
-
2 楼
应该没有这种地址
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
protected mode下32位地址范围0x00000000--0xFFFFFFFF
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
楼主理解不对吧
CPU拿到线性地址后会根据页表取得物理地址
如你所说这个线性地址是无效的,即会触发缺页异常(R3则程序崩溃,R0则蓝屏或重启)
和北桥有啥关系?还没到读物理地址的那一步呢
真到了那一步,即线性地址有物理地址的映射,假设读物理地址错误,则立即蓝屏或重启(硬件故障)
在BOOTLOADER阶段BIOS会提供可用物理内存的信息,以OS的严谨性几乎不存在映射错误
还有,发到北桥的是物理地址
个人见解
|
能力值:
(RANK:10 )
|
-
-
5 楼
windows当然不会映射错误的物理地址,我自己在OS以前访问,比如MBR里面,我自己写旳,mov ebx,0b2000000h,会怎样?死机?还是ebx=0?
|
能力值:
( LV7,RANK:100 )
|
-
-
6 楼
立刻重启
|
能力值:
(RANK:10 )
|
-
-
7 楼
你说的是错的,我实验了,啥事没有,ebx=0,继续执行.
|
能力值:
( LV7,RANK:100 )
|
-
-
8 楼
额,你的一句话不足以让我信服。
最好能说一下你的实验环境,实模式还是保护模式?
中断向量有没有?页表信息怎样?
按照你ebx的写法,应该是属于保护模式,引发缺页中断了吗?
我的意思是如果是硬件错误(包括读物理内存越界)都会当机的。
---
还有你的假设,在MBR里写mov ebx,0b2000000h是不现实的
MBR最多512字节,分区表信息是16字节,最多4个分区,也就是说代码最多有448字节
而这些空间不足以支持从实模式到保护模式的转换,因此都是在osloader中实现的
所以我认为你的假设不成立(我写过MBR并成功引导Windows)
也就是说你的实验环境不是MBR中
|
能力值:
(RANK:10 )
|
-
-
9 楼
没有代码,就用debug对一个不存在的地址读数据,写数据,没任何错误.
比如mov es,0a000h
mov ax,0
mov es:[ax],3
;对a000:0写入数据3,不会出错,正常执行
mov bx,es:[ax]
;读取a000:0的数据,结果不是3,而是0,就是说写入是无效的,读取也是无效的,任何情况都返回0
;但是绝对不会出现异常的错误,就像什么都没发生,继续执行下一条语句,只不过非法内存的值为0而已
|
能力值:
( LV7,RANK:100 )
|
-
-
10 楼
[QUOTE=squdong;1303793]没有代码,就用debug对一个不存在的地址读数据,写数据,没任何错误.
比如mov es,0a000h
mov ax,0
mov es:[ax],3
;对a000:0写入数据3,不会出错,正常执行
mov bx,es:[ax]
...[/QUOTE]
呵呵,看来是我想多了。
|
|
|