OS实验2-3 课堂练习2.2 中断异常的处理过程

OS实验2-3 课堂练习2.2 中断/异常的处理过程

第1关:除零异常分析

本关任务:

在这里插入图片描述

解题过程:

1.查看idiv指令地址

使用list命令查看函数语句

在这里插入图片描述jiffies = jiffies/0在main函数147行,故可设置断点

b 147
c

在这里插入图片描述使用disas命令或x/6i $eip命令即可查看汇编指令,idiv指令地址为0x0000690e

2.查看当前指令位置和栈位置

运行到idiv指令位置(si,或设断点)

在这里插入图片描述使用info register(info reg)命令即可查看寄存器保存值

2.查看新指令位置和栈位置、栈中保存的恢复点位置和用户栈位置

si执行idiv指令

在这里插入图片描述使用info register(info reg)命令查看此时寄存器保存值

在这里插入图片描述x/5wx $esp
查看栈顶保存内容,故栈中保存的恢复点位置为0xf:0x690e;用户栈位置为0x17:0x25760

补充知识:

1.当前指令位置和栈位置

CS:EIP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 EIP 为指令指针寄存器 SS寄存器中存着栈顶的段地址SP寄存器中存放着偏移地址,通过这两个寄存器中的值就可以判断栈顶的位置。

2.栈中中断现场的结构

在这里插入图片描述(OLD SS:OLD ESP) 描述了用户栈顶的位置,(OLD CS:OLD EIP) 描述了恢复点的位置

在这里插入图片描述注意:x86 中栈是从高地址向低地址方向增长的,这里的栈顶位置是 0x1fa2c,但查看仍要从高地址向低地址查看!故SS:ESP值为0xf:0x690e 而非反过来

执行idiv指令后,栈中保存的恢复点与栈顶位置为执行idiv指令前当前指令位置与栈顶位置

第2关:int指令分析

本关任务:

在这里插入图片描述

解题过程:

1.int 0x81执行之前当前指令位置和栈位置

首先找到task1函数入口

在这里插入图片描述在task1处设置断点

再通过查看汇编指令找到第一处int 0x81指令位置

在这里插入图片描述使用disas命令后,使用si命令到达int 0x81执行之前

在这里插入图片描述使用info reg命令查看当前指令位置和栈位置

2.int 0x81执行之后当前指令位置和栈位置

si命令执行int 0x81,再使用info reg查看

在这里插入图片描述

3.查看栈中保存的恢复点位置和用户栈位置

在这里插入图片描述同第一关

猜你喜欢

转载自blog.csdn.net/weixin_67752743/article/details/128270201
今日推荐