第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
完成以上即可测评辣~
【以上是闯关过程,仅供参考。】