shoelace源代码分析之winiboot

shoelace源代码分析之winiboot_第1张图片


用winhexdump可以看到我们的img文件,也就是硬盘的主引导记录被winiboot覆盖,在0x1fe处有55aa的硬盘启动标志。

当然还得有分区表。


winboot是由winboot.x汇编文件生成的相当于bootsect文件也就是也要放到硬盘的主引导记录上mbr

它的作用是打印硬盘分区信息,选择从哪个分区引导。

然后把接力棒交给选择的分区!


shoelace源代码分析之winiboot_第2张图片


下面是winiboot.x中的一些关键代码


boot:
    push    ax            | remember partition
    addb    al,#ONE            | say which one
    call    putc
    mov    bx,#m_crlf
    call    puts
    pop    ax

    movb    ah,#partition        | size of each partition
    mulb    ah            | offset
    mov    si,#BUFFER+TABLE    | point at partition table
    add    si,ax            | point at partition entry

    pushf                | fake an int 0x13    这里是把启动分区的第一个扇区加载到内存,把接力棒传出出!
    push    cs
    mov    bx,#BOOTCODE
    push    bx
    mov    ax,#VECTOR        | vector segment
    mov    es,ax

    mov    ax,#0x201        | read one sector
    seg    es
    movb    dh,shead(si)        | head
    seg    es
    movb    cl,ssector(si)        | sector
    seg    es
    movb    ch,scylinder(si)    | cylinder
    movb    dl,diskcode        | disk

    seg    es
    jmpi    @DISK_VECTOR        | read boot


你可能感兴趣的:(shoelace源代码分析之winiboot)