【问题标题】:Virtual box vdi Nasm jump虚拟盒子 vdi Nasm 跳转
【发布时间】:2012-11-07 21:24:38
【问题描述】:

我正在研究引导加载程序。也就是说,我正在尝试使用 Nasm 编写简单的引导加载程序,它将在 VB(vdi 磁盘)中运行。现在,我确实设置了一个用于测试目的的 virtualbox 环境,并成功加载了位于绝对地址(HXD 十六进制编辑器)0x2000 上的 MBR。但现在我想跳出 MBR(0x2200 大端)并执行驻留在那里的代码(低于 sn-p 不做这项工作)。我使用 Nasm 指令 [org 0x7C00],进行跳转时是否必须使用此偏移量?

[BITS 16]
[org 0x7C00]

%define location 0x0022

start:

    mov al, 0x12
    mov ah, 0
    int 0x10

    jmp location:0000

TIMES 510 - ($ - $$) db 0
DW 0xAA55

这是来自 vdi 的十六进制视图(2000h 是 MBR 开始的地方,2200h 是我要跳转的地方):

【问题讨论】:

    标签: assembly x86 virtualbox nasm x86-16


    【解决方案1】:

    引导扇区将在地址 0x7c00 加载(由于实模式段的特殊性,可以通过多种方式寻址。两个常见的是 0:0x7c00 和 0x7c0:0 - 你不应该依赖一个特定的)。它在磁盘映像中位于偏移量 0x2000 的事实可能是由于所述映像的格式,它与内存地址无关。此外,引导过程仅加载 512 字节的单个扇区,如果您需要更多,则必须自己加载。然后你可以使用你加载它的地址跳转到它。

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2015-10-02
      • 2014-06-25
      • 1970-01-01
      相关资源
      最近更新 更多