1/0 号进程 mynext 变量的逻辑地址与线性地址

第一关:分析1号进程。本关较为简单,跟着左边的教程走一遍即可通过

先设置版本1内核为分析对象,打开gdb调试,在155行设置断点并跳转(因为1号进程在155行调用了函数output_char)

(gdb)b 155
(gdb)c

第一问 函数output_char对应的第一条汇编指令的地址是多少?

反汇编即可查看

(gdb)x/6i $eip

第二问 mynext变量所在的段地址和段内偏移是多少?该段地址对应几号描述符?存放在哪个断描述符表中(GDT/LDT)?

&mynext即为其段内偏移,段地址存储在ds寄存器中

段地址是16位,高13位化为十进制即为对应的描述符序号,倒数第3位为0表示存放在GDT中,为1表示存放在LDT中

(gdb)p &mynext
(gdb)p/x $ds

0x17高13为化为十进制为2,倒数第3位为1,因此对应2号描述符,存放在LDT中 

第三问 ldt数组的起始地址是多少?其中1号和2号描述符里存放的段起始地址分别是多少?

查找ldt的起始地址有两种方法:

法一:直接p &current->ldt即可查看

(gdb)p &current->ldt

法二 :查找gdt的第7项断描述符,计算出ldt起始地址(注意低32位在前,高32位在后)

(gdb)x/16wx gdt

查看ldt的内容即可计算1号和2号描述符存放的段起始地址

(gdb)p/x current->ldt

对于2号描述符存放的段起始地址,可以直接查看当前进程控制块的start_code成员(前述可知对应2号描述符)

(gdb)p/x current->start_code

第四问 mynext变量所在的的线性地址是多少? 

 用段起始地址0x4000000和段内偏移0x2282c相加即得:0x402282c

第二关分析0号进程,过完全类似,唯一不同的在于断点应设置在172行,在此就不再赘述了

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值