【头歌】操作系统 课堂练习2.2:中断/异常的处理过程

课堂练习2.2:中断/异常的处理过程

第1关:除零异常分析

第1关 任务描述

分析版本 1.1 内核,回答下列问题:
1.在函数 main 的语句jiffies = jiffies/0;所对应的汇编指令片段中,有一个 idiv 指令,此指令的地址是多少?
2.在该 idiv 指令执行之前,当前指令位置(CS:EIP)和栈位置(SS:ESP)分别是多少?
3.使用 si 命令执行了该指令后,新指令位置和栈位置分别是多少?此时栈中保存的恢复点位置和用户栈位置分别是多少?

第1关 任务过程

1.1 打开终端,输入以下命令
cp /data/workspace/myshixun/exp1/1.1.tgz ~/os
cd ~/os/linux-0.11-lab
tar -zxvf ../1.1.tgz 1.1
rm -rf cur
ln -s 1.1 cur
cd 1.1/linux
make
1.2 打开另一个终端,输入以下命令
cd ~/os/linux-0.11-lab
./rungdb
1.3 在第一个终端继续输入
cd ../..
./mygdb
1.4 gdb调试输入
b main.c:147
c
x/6i $eip
si
si
si
info registers
si
info registers

请添加图片描述

1.5 退出gdb调试,保证下一关环境正常运行
kill
y
quit

第2关:int指令分析

第2关 任务描述

分析版本1内核,回答下列问题:
1.函数 task1 的第一个int 0x81指令执行之前,当前指令位置(CS:EIP)和栈位置(SS:ESP)分别是多少?
2.使用 si 命令执行了该指令后,新指令位置和栈位置分别是多少?此时栈中保存的恢复点位置和用户栈位置分别是多少?

第2关 任务过程

2.1 在第一个终端输入
cp /data/workspace/myshixun/exp2/1.tgz ~/os
cd ~/os/linux-0.11-lab
tar -zxvf ../1.tgz 1
rm -rf cur
ln -s 1 cur
cd 1/linux
make
2.2 在第二个终端输入
cd ~/os/linux-0.11-lab
./rungdb
2.3 在第一个终端继续输入
cd ~/os/linux-0.11-lab
./mygdb
2.4 gdb调试输入
b task1
c
x/5i $eip
si
x/5i $eip
info registers
si
info registers
x/5wx $esp

在这里插入图片描述

2.5 退出gdb调试,保证下一关环境正常运行
kill
y
quit

第3关:

第3关 任务描述

本关任务回答问题:
1.函数 task1 的第一个int 0x81指令执行时,会转到对应的中断/异常处理程序去运行,请问在该处理程序的 iret 指令执行之前,指令位置(CS:EIP)和栈位置(SS:ESP)分别是多少?此时栈中保存的恢复点位置和用户栈位置分别是多少?
2.使用 si 命令执行了该 iret 指令后,新指令位置和栈位置分别是多少?

第3关 任务过程

3.1 在第二个终端输入
cd ~/os/linux-0.11-lab
./rungdb
3.2 在第一个终端输入
cd ~/os/linux-0.11-lab
./mygdb
3.3 gdb调试输入
b task1
c
x/5i $eip
si
x/5i $eip
info registers
si
 
bt
disas
b *0x795e
c
x/5i $eip
info registers
x/5wx $esp
si
info registers

在这里插入图片描述

3.4 退出gdb调试
kill
y
quit
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值