我安装了grub v1.98,在拆解MBR后,我找到了以下不明白的代码片段:
xor ax,ax
mov [si+0x4],ax
inc ax
mov [si-0x1],al
mov [si+0x2],ax
mov word [si],0x10
mov ebx,[0x7c5c]
mov [si+0x8],ebx
mov ebx,[0x7c60]
mov [si+0xc],ebx
mov word [si+0x6],0x7000
mov ah,0x42
int 0x13
看来这段代码试图设置阶段1.5代码的磁盘地址,然后加载并运行它.但是,我怎么能弄清楚它试图读取哪个物理块?更重要的是,舞台1.5代码的目的地是什么? 0x7000?
我指的是Windows 7的MBR,后续启动代码加载0x7c00.鉴于MBR首先在地址0x7c00加载,它包含一段代码,将MBR从0x7c00复制到0x0600,然后在原始代码损坏的情况下分支到0x0600.将加载阶段1.5代码与地址0x7000冲突的原始代码?更重要的是,我还发现:
jmp short 0x65
nop
sar byte [si+0x7c00],1
mov es,ax
mov ds,ax
mov si,0x7c00
mov di,0x600
mov cx,0x200
cld
rep movsb
push ax
push word 0x61c
retf
在MBR的开头.似乎代码试图做同样的事情,在Windows 7的MBR中将原始MBR从0x7c00复制到0x0600,除了第一个jmp指令.这些代码实际上会执行吗?如果是,那么什么时候会控制跳跃.(我相信答案是肯定的,但是被领先的jmp困惑了).
最佳答案