第1关:第一次进程切换过程分析
任务描述
本关任务回答问题: 在第一次进程切换时: 1.是从几号进程切换到几号进程?0 号进程和 1 号进程的剩余时间片分别是多少? 2.在(ljmp)切换前,寄存器对 CS:EIP 和 SS:ESP 的值是多少?其下一条指令的地址是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少? 3.在(ljmp)切换后,寄存器对 CS:EIP 和 SS:ESP 的值是多少?0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?
答案
1、配置好环境后打开gdb调试,先在sched.c的第136行创建一个断点,并查询进程0和进程1的剩余时间片。
2、跟踪到 switch_to,然后反汇编找到 ljmp 指令,再跟踪到该指令
查询下一条指令的地址。
查询切换前寄存器对 CS:EIP 和 SS:ESP 的值
查询0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值和1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值
3、 使用si单步执行ljmp指令切换进程,并查询切换后寄存器对 CS:EIP 和 SS:ESP 的值
查询0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值和1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值
4、填写文档,提交测评
第一次进程切换时:
1.是从几号进程切换到几号进程?(0)(1)
2.0号进程和1号进程的剩余时间片分别是多少?(13)(15)
3.在(ljmp)切换前,寄存器对 CS:EIP 和 SS:ESP 的值是多少?(0x8:0x6f33)(0x10:0x1f9cc)其下一条指令的地址是多少?(0x6f37)0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0x17:0x0)(0x17:0x0)1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0xf:0x690a)(0x17:0x25740)
4.在(ljmp)切换后,寄存器对 CS:EIP 和 SS:ESP 的值是多少?(0xf:0x690a)(0x17:0x25740)0 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0x8:0x6f37)(0x10:0x1f9cc)1 号进程的 TSS 中的字段对 cs:eip 和 ss:esp 的值是多少?(0xf:0x690a)(0x17:0x25740)
第2关:第一进程切换时TR寄存器的变化分析
任务描述
本关任务回答问题: 1.第一次进程切换前,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址? 2.第一次进程切换后,CPU 中 TR 寄存器的值是多少?它所指向的 GDT 描述符中的段起始地址是多少?是几号进程的 TSS 地址?
答案
1、 利用第一关得到的ljmp的地址0x6f33使用dbg调试
2、对第一关得到的ljmp的下一条指令的地址0x6f37 使用dbg调试
3、填写文档,提交测评
1.第一次进程切换前,CPU 中 TR 寄存器的值是多少?(0x0020)它所指向的 GDT 描述符中的段起始地址是多少?(0x0001ed08)是几号进程的 TSS 地址?(0)
2.第一次进程切换后,CPU 中 TR 寄存器的值是多少?(0x0030)它所指向的 GDT 描述符中的段起始地址是多少?(0x00fff2e8)是几号进程的 TSS 地址?(1)