前言
上篇我们分析了bochs对于int产生的interrupt事件的模拟处理流程,只是我们还没看看其返回如何实现的,我们这篇文章来分析一下。
虽然源代码还没看,但我估计这篇文章有点短,昨晚失眠到两点多,今天早上还是七点起来,中午竟然睡不着,我人麻了,早写完回家洗个澡休息。
bochs-dbg定位
这个之间按上篇文章 int 指令往前jmp几条指令后就很容易看见,不用ida来逆向分析了,因为其还要逆向lib32库挺麻烦的。

代码分析
其iret与int一样,在不同模式下其行为不一样,因此iret指令一上来就需要做当前CPU模式判断,在保护模式中,之后其按顺序出栈,加载段选择子,这些很好理解,在上篇文章中这些具体操作我们都分析过了,这里就不过多解释了。
值得注意的是,好像无论trap还是interrupt,其iret时执行的行为方式没有差别,在分析过程中没有看到对此的区分,之后我们还会对trap再来一轮分析。
BX_CPU_C::iret_protected(bxInstruction_c *i)
{
/* 16bit opsize | 32bit opsize
* ==============================
* SS eSP+8 | SS eSP+16
* SP eSP+6

本文详细分析了Bochs模拟处理器对iret指令的处理流程,探讨了在保护模式下的操作,并指出iret指令在trap和interrupt情况下的行为一致性。文章通过bochs-dbg定位代码,简化了分析过程。
最低0.47元/天 解锁文章
1232

被折叠的 条评论
为什么被折叠?



