😇一个小实验
先在实验根目录里输入make,然后输入(下面这行意思是不弹窗):
$ make qemu-nox-gdb或者(下面这行意思是有弹窗):
$ make qemu-gdb这时就会开启qemu里的gdb server。
然后在实验根目录再打开一个终端,输入make gdb,观察一下。
QEMU为什么会这样启动呢?
Intel就是这样设计8088处理器的(不同CPU架构下,BIOS可能不一样,这里只是举了x86架构的例子)。
因为电脑的BIOS是“天生的”物理地址范围0x000f0000-0x000fffff,这种设计可以确保机器的BIOS总是在开机之后先获得机器控制权(位置固定)。QEMU模拟器自带自己的BIOS,它将BIOS放置在处理器模拟物理地址空间的这个位置。处理器复位时,(模拟)处理器进入实模式,并将CS设置为0xf000, IP设置为0xfff0。
那么分段地址0xf000:fff0如何变成物理地址?
为了回答这个问题,我们需要了解一些关于实际模式寻址的知识。在实模式下(即PC刚启动的模式),地址转换的工作公式为:物理地址= 16 *段+偏移量。
因此,当计算机将CS设置为0xf000, IP设置为0xfff0时,所引用的物理地址为:
16 * 0xf000 + 0xfff0 # in hex multiplication by 16 is
= 0xf0000 + 0xfff0 # easy--just append a 0.
= 0xffff0 0xffff0是BIOS结束前16个字节(0x100000)。在第一条指令的后面只有16个字节,啥也干不了。所以,......
Last updated