一个小实验
先在实验根目录里输入make
,然后输入(下面这行意思是不弹窗):
或者(下面这行意思是有弹窗):
这时就会开启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
时,所引用的物理地址为:
0xffff0
是BIOS
结束前16个字节(0x100000
)。在第一条指令的后面只有16个字节,啥也干不了。所以,......
Last updated