第1关:进程创建前后TR寄存器值的分析
本实训需要设置内核版本 1 为调试分析的对象,用 gdb 调试内核,内核版本 1 的压缩文件存放在/data/workspace/myshixun/exp1
中。
环境配置详情请移步前几关~头歌操作系统 课后作业3.1:进程的描述与状态
编程要求
根据相关知识,回答问题:(将答案填写在/data/workspace/myshixun/第一关.txt
中)
- 0 号进程的 fork 系统调用(main.c:147)中的陷入指令的地址是多少?
- 0 号进程执行 fork 系统调用之前,TR 寄存器的值为多少?
- 0 号进程刚执行完 fork 系统调用时,TR 寄存器的值为多少?
代码详解
启动gdb调试器,调入0号进程的fork 系统调用中的陷入指令:
b 145
c
n
x/5i $eip
si
x/5i $eip
查看指令地址,此时发现该陷入指令的地址是0x6908
启动dbg调试器:
./rundbg
在dbg调试器中输入:
b 0x68e8
c
sreg
文件答案:
第2关:1 号进程创建前后的GDT和PCB分析
编程要求
根据相关知识,回答问题:(将答案填写在/data/workspace/myshixun/第二关.txt
中) 注:操作过程中只能出现一个0x0000690a
。
- 0 号进程的进程控制块的起始地址是多少?0 号进程的 TSS 的地址是多少?
- 在 1 号进程创建前,task 数组的前 2 项是多少?GDT 的 4~7 号描述符(64位)是多少?其中存储的段起始地址分别是多少?
- 在 1 号进程创建后,task 数组的前 2 项是多少?GDT 的 4~7 号描述符(64位)是多少?其中存储的段起始地址分别是多少?
- 1 号进程的进程控制块的起始地址是多少?1 号进程的 TSS 的地址是多少?1 号进程执行的第一条语句的地址是多少?
- 1 号进程的核心栈栈底的位置是多少?该位置距离 1 号进程的进程控制块的起始位置有多远(字节数)?
启动gdb调试器,查看0号进程的进程控制块起始地址与TSS地址,并查看1号进程创建前,task数组的前2项:
b 145
c
n
p *current
p ¤t->tss
p task
查看在 1 号进程创建前,GDT 的 4~7 号描述符(64位)和存储的段起始地址:
启动dbg调试器:
./rundbg
在dbg调试器中输入:
b 0x68e8
c
sreg
在gdb调试器中输入:
x/20wx 0x5cc0
查看1号进程的进程控制块的起始地址和TSS地址:
b task1
c
p *current
p ¤t->tss
第二关答案为:文章来源:https://www.toymoban.com/news/detail-444374.html
文章来源地址https://www.toymoban.com/news/detail-444374.html
到了这里,关于头歌操作系统 课堂练习3.2:进程的创建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!