IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序

一、中断处理的过程

 

根据Intel 64 and IA-32 Architectures Software Developer’s Manual 的介绍,在中断或异常产生是,CPU会将当前执行的指令(或下一条指令)在内存中的地址,也就是EIP的值,放入栈中,同时还会放入CS段寄存器和eflags标志寄存器的值等。

根据当前的优先级不同(ring0或ring3,也就是执行与用户态还是内核态)会有较大的不同。如果异常或中断发生时,系统正执行在内核态,那么CPU不会切换栈,直接将EFLAGS、CS、EIP和Error Code压入栈中,如果正执行在非内核态,那么先切换到内核,切换到内核栈,然后依次压入SS、ESP(用户态线程的)、EFLAGS、CS、EIP和Error Code。(上述过程CPU自行完成,操作系统只需要把ISR放到正确的位置等待调用。)然后通过IDT找到对应的ISR 开始执行。

ISR完成处理后通过IRET(IRETD)指令返回到被中断的程序中继续执行即可。

 

 

二、安装配置Bochs和XP Guest系统

 

在上一篇文章中,说了为什么不能使用WinDbg调试ISR。

 

好在我们还有bochs这个带调试功能的软件虚拟机。bochs的调试功能比起WinDbg这个专业调试器来,功能弱了十万八千里。但是,由于bochs是一个软件实现的CPU(对Guest系统来说相当于硬件),比WinDbg要低一个层次,在一些特殊的情况下bochs就能出奇制胜了。bochs是CPU,是一切的主宰,不需要你guest系统给我提供任何支持。

 

安装好bochs以后,可以在bochs中安装windows xp。bochs运行所依赖的一切硬件的配置都是依赖于bxrc配置文件。把安装目录下的bochsrc.bxrc复制一份,双击打开。在下图的对话框里可以编辑配置文件。

如果安装xp需要将CPU的主频调高一些(我用的50000000)memory调得合适一些,比如512Mb。在这之前还需要使用安装目录下的bximage.exe创建一个growing的硬盘文件,比如c.img。growing的方式可以避免以后guest系统硬盘不够用。

 

 

然后配置“Disk & Boot”选项,挂载上c.img

 

 然后配置光盘。需要一个windows xp安装光盘的iso文件,也可以映射到物理光驱。

 

 然后配置有cdrom启动。

 

调试过程最好log下来,便于后面分析。在“logfile”选项中配置调试的日志文件。

 

 

然后save,start就可以开始运行bochs了。

安装过程需要比较漫长的时间,毕竟软件CPU的性能和物理CPU不在一个数量级上。打个球,洗个澡,再吃个饭的时间应该差不多了。
安装好以后注意备份一下,在bochs里安装xp可是一个宏大的系统工程了。然后再把boot选项设置为从disk启动。

安装好以后,就可以使用bochs调试器bochsdbg.exe加载配置文件运行了。在“Bochs Start Menu”里面load然后start。

bochsdbg会停在f000:fff0处(这个时候CPU还没有切换到保护模式)是bios的起始处。
运行命令c(continue)可以继续系统运行。不久windows系统启动。在console里Ctrl-C可以中断运行输入各种调试命令。

 

操作虚拟机的鼠标需要点击按钮,释放时Ctrl+鼠标第三键(滚轮)

 

 

三、使用bochs调试观察中断过程

 

先介绍几个调试指令(不是全部,只是在本文中用的的,其他的可以参考help或Bochs的文档)

r 查看通用寄存器

sreg 参看段寄存器(idtr被归到这里了)

creg 参看系统寄存器(cr0等)

x 参看内存(线性地址)

xp 参看内存(物理地址)

pb 通过物理地址下执行断点

lb 通过线性地址下执行断点

setpmem 修改物理内存(Bochs只支持通过物理地址修改内存,不过可以通过info tab参看整个分页表,手工转换一下,而且单步跟踪时Bochs也会同时打印指令对应的物理地址和线性地址)

help 帮助

info idt 参看idt信息

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值