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

文章详细描述了对Linux0.11内核中除零异常、int指令和iret指令的分析过程,包括在不同阶段的指令地址、栈位置以及中断处理后的恢复点信息。读者通过使用gdb进行调试,了解了内核执行流程和栈操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:除零异常分析

任务描述

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

实验准备

本关卡使用版本 1.1 内核作为分析对象,内核文件存放在/data/workspace/myshixun/exp1文件夹中,可以将其解压到linux-0.11-lab下使用。

回答问题:(将答案填写在/data/workspace/myshixun/第一关.txt中)
答案:

1.  0x0000690e   2. 0xf:0x690e   0x17:0x25760   

3.  0x8:0x814b   0x10:0x1fa2c  4. 0xf:0x690e  0x17:0x25760

ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.1tgz ~/os
ls os/
cd ~/os/linux-0.11-lab
tar -zxvf ../1.1.tgz   1.1
rm -rf cur
ln -s 1.1 cur
ls
cd 1.1/linux
make
cd ../..
./rungdb

#打开新的终端

cd ~/os/linux-0.11-lab
./mygdb

#启动gdb

b main.c:147
c
x/6i $eip
si
si
si
info reg
si
info reg
x/wx $esp
quit
y

完成以上即可测评~

第2关:int指令分析

任务描述

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

回答问题:(将答案填写在/data/workspace/myshixun/第二关.txt中)

答案:1.  0xf:0x7987  0x17:0x2573c   

2.    0x8:0x7948  0x10:0xffffec   

3.   0xf:0x7989  0x17:0x2573c  (更新修改了此处)

全过程:

ls /data/workspace/myshixun/exp2
cp /data/workspace/myshixun/exp2/1.tgz ~/os
ls os/
cd ~/os/linux-0.11-lab
tar -zxvf ../1.tgz   1
rm -rf cur
ln -s 1 cur
ls
cd 1/linux
make
cd ../..
./rungdb

#打开新的终端

cd ~/os/linux-0.11-lab
./mygdb

#启动gdb

b task1
c
x/5i $eip
si
x/5i $eip
info reg
si
info reg
x/5wx $esp
quit
y

完成以上即可测评辣~

第3关:iret指令分析

任务描述

本关任务回答问题:

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

回答问题:(将答案填写在/data/workspace/myshixun/第三关.txt中)

答案:1. 0x8:0x795e 0x10:0xffffec 2.0xf:0x7989 0x17:0x2573c 3. 0xf:0x7989 0x17:0x2573c

全过程:

#在第二关的基础上,可以不用再打前面那一大段,直接在第二关关闭gdb后面开始:
./rungdb

#打开新的终端

cd ~/os/linux-0.11-lab
./mygdb

#启动gdb

b task1
c
x/5i $eip
si
x/5i $eip
si
bt
disas
b * 0x795e
c
info reg
x/5wx $esp
si
info reg
quit
y

 完成以上即可测评辣~

【以上是闯关过程,仅供参考。】

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值