This enables Bochs to load up to 4 optional ROM images.
Be sure to use a read-only area, typically between C8000 and EFFFF. These optional ROM images should not overwrite the rombios (located at F0000-FFFFF) and the videobios (located at C0000-C7FFF).
Those ROM images will be initialized by the BIOS if they contain the right signature (0x55AA).
It can also be a convenient way to upload some arbitrary code/data in the simulation, that can be retrieved by the boot loader
-------------------------------------------------------------------------------------------
在新的int 19h中断处理函数中,我们发现leaving.bin的作者又hook了int 13h中断,中断int 13h是标准的处理磁盘的BIOS中断类型。这种思路也符合IceLord在文献中的描述,即hook int 19h,再hook int 13h,以达到操作磁盘的目的。如何检测这种hook操作,我们在这个系列的后续小节进行讨论。
静态剖析leaving.bin的讨论就在此告一段落。
动态调试leaving.bin
在新的int 19h中断处理函数中,我们发现leaving.bin的作者又hook了int 13h中断,中断int 13h是标准的处理磁盘的BIOS中断类型。这种思路也符合IceLord在文献中的描述,即hook int 19h,再hook int 13h,以达到操作磁盘的目的。
这种hook int 19h中断的操作是否真正执行,我们需要验证。验证的执行,我们需要借助Bochs的帮助。我们在上节介绍过Bochs强大的调试功能,它甚至能够调试BIOS和操作系统。在开始调试之前,我们首先来回忆一下Bochs调试器的几条常用调试命令(更详细命令使用请参阅Bochs使用帮助):
b addr 在某物理地址设置断点
c 继续执行,直到遇上断点
s 单步执行
xp 查看内存内容
u 对当前地址进行反汇编
-------------------------------------------------------------------------------------------------
我们在ISA附加模块中预先把int 19h进行Hook操作,在系统调用int 19h中断进行系统引导的时候,就会先执行我们的预定程序。而这个预定程序,我们往往会考虑继续扩大对系统资源的控制能力,如继续Hook int 13h中断来取得对磁盘的控制。不能直接Hook int 13h来操作磁盘,是因为这种操作不能成功。具体原因我现在也不是很清楚,我想可能在int 19h进行系统引导后,控制权交给了MBR,由MBR调用int 13h来触发我们的Hook程序,但这时的Hook程序入口点和我们在ISA模块中设定的入口点(由BIOS加载ISA模块到特定内存入口点),已完全不一样,所以找不到我们的Hook程序。不是很肯定,请大牛们指点。