0


课后作业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)**

标签: ubuntu linux 网络

本文转载自: https://blog.csdn.net/z671514087/article/details/128387938
版权归原作者 z671514087 所有, 如有侵权,请联系我们删除。

“课后作业4.4:页式虚存提交”的评论:

还没有评论