课后作业4.4:页式虚存提交

第1关:可执行文件的执行

本关任务:

在 bochs 虚拟机中编译程序 01.c ,可以得到一个可执行文件。请分析该程序的运行,回答下列问题:

1.执行该文件的 execve 系统调用刚开始执行时,当前进程的用户虚空间是什么?该空间的第一个页表项和最后一个页表项分别是什么?

2.执行该文件的 execve 系统调用执行结束时,该进程的用户虚空间是什么?该空间占据几个页目录项?第一个页目录项的地址和值分别是什么?

3.该可执行文件的代码段和数据段的长度之和是多少?

首先需要将文件复制到指定目录下:

然后用版本 0 内核启动虚拟机,并在虚拟机中用mcopy 命令将该文件拷入虚拟

机,并编译。

可以在 bochs 虚拟机中先将该文件放入 b 盘,然后关闭 bochs 虚拟机,并在弹出的对话框中选择 yes

然后启动gdb调试,在do_execve处设置断点,一直c,直到最后一个continuing:

然后在bochs虚拟机中运行之前编译好的可执行文件:

回到调试中,输入指令(进程的用户虚空间的起始地址是 current->start_code ,长度是 current->brk),本题用户的虚空间为

0x10000000~0x10043fff

求页表项是什么实际上就是求页表项的值:

根据前面学的方法,先以线性地址的高 10 位为索引在页目录中找到对应的页目录项,然后以线性地址的中间 10 位为索引在页表中找到对应的页表项,

然后输入finish指令,结束该系统调用。

输入相应指令查看虚空间。

输入指令x/wx 0x+64*4,即可求得相应的地址和值。

按quit退出调试,用 objdump 命令查看一个可执行文件的具体内容:

+

最终答案:

1.执行该文件的execve系统调用刚开始执行时,该进程的用户虚空间是什么?(0x10000000~0x10043fff)该空间的第一个页表项和最后一个页表项分别是什么?(0x00ff9025)(0x00fea065)

2.执行该文件的execve系统调用执行结束时,该进程的用户虚空间是什么?(0x10000000~0x10004fff)该空间占据几个页目录项?(1)第一个页目录项的地址和值分别是什么?(0x100)(0x0)

3.该可执行文件的代码段和数据段的长度之和是多少?(0x5000)

猜你喜欢

转载自blog.csdn.net/z671514087/article/details/128387938