第1关:1 号进程 mynext 变量的逻辑地址与线性地址

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第一关的答案填写在/data/workspace/myshixun/第一关.txt中。

  1. 1 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?

  2. 1 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?

  3. 1 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?

  4. 1 号进程的 mynext 变量所在的线性地址是多少?

#配置1.3内核环境
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os/
cd ~/os/linux-0.11-lab/
tar -zxvf ../1.3.tgz
rm -rf cur
ln -s 1.3 cur
cd 1.3/linux
make
cd ../..

 

 开启gdb调试器,在内输入:


b 155 
c
p &mynext #查看变量mynext所在的段内偏移
x/6i $eip #反汇编
p/x $ds
p $ds>>3
p/x current->ldt #查看进程的LDT
p &current->ldt

 第一关文档答案:

 

第2关:0号进程 mynext 变量的逻辑地址与线性地址

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第二关的答案填写在/data/workspace/myshixun/第二关.txt中。

  1. 0 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?

  2. 0 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?

  3. 0 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?

  4. 0 号进程的 mynext 变量所在的线性地址是多少?

版本1.3内核环境配置与第一关相同,这里不再赘述。

打开gdb调试器,并键入:

b 172
c
x/6i $eip
p &mynext
p/x current->ldt
p &current->ldt

 运行效果截图如下:

第二关文档答案: 

Logo

鸿蒙生态一站式服务平台。

更多推荐