-
-
[旧帖]
[求助]引导代码在虚拟机通过,在真机却不行?
0.00雪花
-
发表于:
2013-4-9 21:18
1480
-
[旧帖] [求助]引导代码在虚拟机通过,在真机却不行?
0.00雪花
如题,我打算用lba48方式用端口读操作系统的pbr然后jump到其代码上进行引导操作系统,但这段代码在安有XP的bochs虚拟机上通过,但在真机上去不行,我也考虑了真机主板等硬件不支持LBA48,但我电脑上的win7又能读出硬盘,实在是不理解为什么,恳请给位大虾指点一二!
贴出代码,nasm编译通过
cld
mov cx,512
mov ax,0x07c0
mov ds,ax
mov si,0
mov ax,0x2000
mov es,ax
mov di,0
rep movsb
jmp 0x2000:0x1b
mov ax,0x07c0
mov ds,ax
push 1
push 63
push 0
push 0
push 0
call readhd
mov dx,0
jmp 0x07c0:0
readhd:
mov bp,sp
mov dx,0x1f2
mov al,[bp+11]
out dx,al
mov al,[bp+10];mov al,1
out dx,al ;写两次0x1f2端口: 第一次要读的扇区数的高8位,第二次低8位
inc dx
mov al,[bp+7];mov al,1
out dx,al
mov al,[bp+8];mov al,0
out dx,al ;写0x1f3: LBA参数的24~31位,写0x1f3: LBA参数的0~7位
inc dx
mov al,[bp+4];mov al,0
out dx,al
mov al,[bp+9]
out dx,al ;写0x1f4: LBA参数的32~39位,写0x1f4: LBA参数的8~15位
inc dx
mov al,[bp+5]
out dx,al
mov al,[bp+6]
out dx,al ;写0x1f5:LBA参数的40~47位,写0x1f5: LBA参数的16~23位
inc dx
mov al,0x40 ;lba48 0x40;lba28 0xe0
out dx,al
mov dx,0x1f7
mov al,0x24 ;lba48 0x24;lba24 0x20
out dx,al
mov dx,0x1f7
wai:
in al,dx
and al,0x88
cmp al,0x08
jnz wai
mov ax,512
mov dx,[bp+10]
mul dx
mov cx,ax
mov dx,0x1f0
mov bx,0
rr:
in ax,dx
mov [bx],ax
add bx,2
loop rr
ret 10
[课程]Android-CTF解题方法汇总!