前言
上一期,我们粗略分析了bochs中cpu执行的大体流程,并且修改了代码禁止指令的递归执行。众所周知,在众多指令中通过IO与外设进行交互的指令是in/out指令,我们这篇文章就来大体分析一下in/out指令执行流程。
在第七篇文章中,我们通过floppy外设简单分析了一下IO中断的结构体,我们将它放在这篇文章开头处,可能在分析过程中具有参考价值。
定位到out指令
在上篇文章中我们分析了BIOS的启动流程,其第三条指令为"BIOS_F:E05D out 0Dh, al",因此我们就使用该指令来作为分析指令。
BIOS_F:FFF0 jmp far ptr start_0
BIOS_F:E05B start_0: ; CODE XREF: sub_F5421+2BC↑J
BIOS_F:E05B ; start↓J
BIOS_F:E05B xor ax, ax
BIOS_F:E05D out 0Dh, al ; DMA controller, 8237A-5.
我们下面来设置软件条件断点定位到该指令处,首先必须看上篇文章将递归执行的宏给关掉。之后如下图,我们设置软件条件断点,其该指令的执行地址为0xf000:E05Dÿ