在VirtualBox上测试2 Stage Bootloader

时间:2017-07-21 07:30:58

标签: assembly virtualbox masm bootloader x86-16

我正在尝试使用visualstudio 1.5开发16位样本2阶段引导加载程序,并希望在虚拟盒上进行测试。

我的示例代码是

    _TEXT   SEGMENT WORD USE16 'CODE'
    ASSUME  CS:_TEXT, DS:_TEXT, ES:_TEXT


    DATAAREA        EQU 7A00H


ORG     0600H   

StartFromSecondSector:
    jmp     near ptr SecondSector
    nop
    ORG     0600H


SecondSector:
        ; Boot Code

ORG DATAAREA    
    is_ext      db  0

ORG     7C00H
ASSUME  CS:_TEXT, DS:_TEXT, ES:_TEXT    

main:

    ;segment registers and stack Init Code
        xor ax, ax          
        mov ds, ax
        mov es, ax
        cli                 
        mov ss, ax          
        mov sp, 4F00H   ; Stack Top
        sti

        ; Check Disk Extension  
        ; https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D42h:_Extended_Read_Sectors_From_Drive

        mov     dl, 80h
        mov     ah, 41h
        mov     bx, 55aah
        int     13h 
        setnc    is_ext 

        ; Get Disk Detail
        ; https://en.wikipedia.org/wiki/INT_13H#INT_13h_AH.3D08h:_Read_Drive_Parameters     

        mov     dl, 80h
        mov     ah, 08h
        int     13h

        cmp     bx, 0aa55h
        je      LoadBootSector 

        jmp     ErrorMSGPrompt 


    LoadBootSector:
        mov     bx, 600h
        mov     ah, 42
        mov     dl, 80h
        int     13h

        jmp     StartFromSecondSector

        ORG     7C00H+1BEH  
        DB      64 DUP (0FFH)   

        DB      055H        
        DB      0AAH 
        ErrorMSGPrompt:
            ; Error mesage int10
        _TEXT       ends    
end     main

在组装和制作16位可执行文件后,我删除了EXE签名并将二进制文件放在2个文件中。 1 stage0.DAT包含从7c00开始的512字节代码,另一个文件是stage1.DAT,其中包含从600 offset开始的下一个512字节。

在固定大小的virtualbox vdi HDD中,我将stage0.dat的512字节从0200000复制到2001F0,并将stage1.DAT的512字节从0200600复制到02007F0

stage0工作正常但跳转到第2阶段失败。我错过了一些东西吗?

0 个答案:

没有答案