该题在网上难以找到答案,笔者在完成作业后将其解法开源
(声明:该解题步骤并非原创,而是站在巨人的肩膀上,对白姐,孙哥,毓姐等大佬的解题步骤的总结整理)
第2关:可执行文件的加载
将该文件放入目录 linux-0.11-lab/b/ 下
然后用版本 0 内核启动虚拟机,并在虚拟机中用 mcopy 命令将该文件拷入虚拟机硬盘:

然后我们对该文件进行编译,并将该文件放入b盘

此时我们在打开命令行,已经可以看到该文件了

我们可以用objdump命令查看该可执行文件的具体内容


我们可以得到第一题答案
然后启动gdb调试,在do_execve处设置断点直到卡在continue

然后再bochs中执行

再在do_no_page设置断点,执行过后finish结束

随后查看该进程的代码起始地址:

查看页目录


查看页表项

得到:0x00fdc007,则其对应的起始地址为:0x00fdc000
随后查看该起始地址对应的反汇编指令:

然后我们退出gdb调试
查看01的结构,找到fork函数的位置:

再往下到fork中,发现在0x8d的位置为陷入指令

找到位置之后我们打开dbg调试
先跟踪到代码段的起始地址,再跟踪到fork的陷入地址

通过该逻辑地址查看线性地址

然后creg查看CR3

在查看对应的页目录和页表项


最终答案如下:



Comments | 1 条评论
神!