没有debug时,程式指令直接由cpu运行,由debug载入程式并运行指令时, 代码经由debug解释再交cpu运行, debug本身也是一堆代码,也需要cpu运行, 碰到用户的 'T'(单步), G(直接运行), P(单步但跳过程序/中断)等要求时, debug要作一些必要操作,其中包含int中断, cpu运行中断时,执行动作是:
pushf ;保存标志暂存器
push cs ;保存当前程式CS
push ip ;保存当前程式IP
这样做是保存环境,待完成中断后,回覆原来的cs:ip和flag(标志)
所以图中最后的栈中是debug运行本身代码中断(int 01h)时残留的痕迹.
08 01 39 0B 9D 05 分别是
ip = 0108
cs = 0B39
标志=059D
pushf ;保存标志暂存器
push cs ;保存当前程式CS
push ip ;保存当前程式IP
这样做是保存环境,待完成中断后,回覆原来的cs:ip和flag(标志)
所以图中最后的栈中是debug运行本身代码中断(int 01h)时残留的痕迹.
08 01 39 0B 9D 05 分别是
ip = 0108
cs = 0B39
标志=059D