CSAPP家庭作业答案7 8 9章

答案仅供参考

7.12

解题思路是模仿链接器的行为:使用重定位记录来识别位置然后使用图7.9中的算法计算重新定位的绝对地址,或者简单地从图7.10中的重定位指令中提取它们。有两点需要注意的是第8行的movl指令包含两个需要重定位的引用。第5行和第8行的指令包含对buf[1]的引用,初始值为Ox4,重定位的地址计算为ADDR(buf) +4。

  • 第一次重定位是mov 0x0,%edx,对应于图7-10中的15行,将swap.o中偏移量为3-6的位置上的0x0重定位于运行时的真实地址0x80483c8+3=0x80483cb,其值为0x804945c
  • 第二次重定位是mov 0x4,%eax,在图中16行,将swap.o中偏移量为8-b位置上的0x4重定位与运行时的真实地址0x80483c8+8=0x80483d0,其值为0x8049458
  • 第三次和第四次重定位在movl $0x4,0x0,对应于图7-10的18行,将swap.o中偏移量为10-13的0x0和偏移量为14-17的0x4重定位于运行时的地址0x80483c8+10=0x80483d8和0x80483c8+14=0x80483dc,并将movl $0x4,0x0修改为movl $0x8049458,0x8049548
  • 第五次重定位是mov 0x0,%eax,在图7-10的23行,将偏移量为1f-22的0x0重定位于地址0x80483c8+1f=0x80483e7上的值0x8049548

结果如下表所示:

图7-10中的行号地址
150x80483cb0x004945c
160x80483d00x0049458
180x80483d80x0049548
180x80483dc0x0049458
230x80483e70x0049548

7.13

A

在.text的节的节偏移12处调用了函数,在节偏移为19处发生了值的传递,并且值为0x0,则要被重定位。结合c代码可知在此处将调用p3()的返回值放在edx寄存器中,再和*xp相加,然后再在偏移为21的位置发生函数p2()的调用。所以三次重定位的节偏移分别为12,19,21,分别对指令call 12<p1+0xa>、指令mov 0x0,%eax和指令call 21<p1+0x19>进行重定位。 或者直接使用objdump反汇编也可以得到相同结果。

结果如下表所示:

节偏移重定位类型符号名字
0x12R_386_PC32(相对引用)p3
0x19R_386_32(绝对引用)xp
0x21R_386_PC32(相对引用)p2

B

.data 节中修改了xp的值,重定位于x的地址。所以 .data 节只有一次重定位, 节偏移为0x4,重定位类型是重定位绝对引用,符号名字是xp。

节偏移重定位类型符号名字
0x4R_386_32(绝对引用)xp

8.23

父进程接收并捕获第一个信号,当处理程序还在处理第一个信号时,第二个信号传来被添加到待处理集合中,此时被处理程序阻塞了就还不会被接收,当第三个信号传来,由于类型和第二个信号相同就会被丢弃,第4、5个信号也是如此。当第一个信号处理完毕后,内核注意到还有一个待处理信号(信号2)就会强迫父进程接收,然后执行处理程序,第二次处理完毕后,没有待处理的信号了,就结束。所以只会接收处理两个信号,counter值只会是2,而不是5。

8.24

题目的要求是在子进程中对只读文本段进行写操作,这会导致段错误,所以第二个要求是要输出段错误。而判断异常终止可以使用WIFSIGNALED来判断,若为非0则发生异常终止,修改后的代码如下:

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2int main()
{int status,i;pid_t pid;for(i = 0;i < N;i++)if((pid = fork()) == 0){int *pt = 0x0;*pt = 15213;exit(100+i);}		while((pid = waitpid(-1,&status,0)) > 0){if(WIFEXITED(status))printf("child %d terminated normally with exit status = %d\n",pid,WEXITSTATUS(status));else if(WIFSIGNALED(status)){fprintf(stderr,"child %d terminated by signal %d",pid,WTERMSIG(status));psignal(WTERMSIG(status)," ");}elseprintf("child %d terminated abnormally\n",pid);}if(errno != ECHILD)printf("waitpid error\n");exit(0);
}

输出如下:

在这里插入图片描述

9.11

A. 虚拟地址为0x027c,转换成二进制:00 0010 0111 1100

131211109876543210
00001001111100

B .按照9.6.4节的假设,VPO为地址的0位到5位,本题为111100,VPN为6位到13位,本题为00001001,即0x9,TLBI是6-7位为0x1,TLBT为8-13位为0x2。查表可知索引位0x1、标记位为0x2,不命中,MMU需要从页表中的PTE中取出PPN,得到有效的PPN为0x17,没有缺页。

完整表格为:

参数
VPN0x9
TLB索引0x1
TLB标记0x2
TLB命中?(是/否)
缺页?(是/省)
PPN0x17

C. 将得到的物理页帧号0x17( 01 0111 )作为实际物理地址的前6位,偏移量不变,仍为VPO( 11 1100 ),得到最终的物理地址: 0101 1111 1100

11109876543210
010111111100

D. 将物理地址的6-11位的010111作为CT,其值为0x17,2-5位的1111作为CI其值为0xf,0-1位作为块偏移CO值为0x0。在高速缓存中找索引位0xf的组、标记位0x17的行、偏移为0x0的字节,由高速缓存表可知0xf的组无0x17标记的行,故不命中,无返回字节。 结果如下表:

参数
字节偏移0x0
缓存索引0xf
缓存标记0x17
缓存命中?(是/否)
返回的缓存字节-

9.12

A.虚拟地址为0x03a9,其二进制为00 0011 1010 1001

131211109876543210
00001110101001

B. 按照9.6.4节的假设,VPO为地址的0位到5位,本题为101001,VPN为6位到13位,本题为0000 1110,即0xe,TLBI是6-7位为0x2,TLBT为8-13位为0x3。查表可知索引位0x2、标记位为0x3,由于有效位为0不命中,MMU需要从页表中的PTE中取出PPN,得到有效的PPN为0x11,没有缺页。
完整表格为:

参数
VPN0xe
TLB索引0x2
TLB标记0x3
TLB命中?(是/否)
缺页?(是/省)
PPN0x11

C. 将得到的物理页帧号0x11( 01 0001)作为实际物理地址的前6位,偏移量不变,仍为VPO( 10 1001 ),得到最终的物理地址: 0100 0110 1001

11109876543210
010001101001

D:将物理地址的6-11位的010001作为CT,其值为0x11,2-5位的1010作为CI其值为0xa,0-1位作为块偏移CO值为0x1。在高速缓存中找索引位0xa的组、标记位0x11的行、偏移为0x1的字节,由高速缓存表可知0xa的组无0x11标记的行,故不命中,无返回字节。

完整表格:

参数
字节偏移0x1
缓存索引0xa
缓存标记0x11
缓存命中?(是/否)
返回的缓存字节-

9.13

A.虚拟地址为0x0040,其二进制为00 0000 0100 0000

131211109876543210
00000001000000

B. 按照9.6.4节的假设,VPO为地址的0位到5位,本题为000000,,VPN为6位到13位,本题为0000 0001,即0x1,TLBI是6-7位为0x1,TLBT为8-13位为0x0。 当VPN=1时,有效位为0,PPN无。所以就没有物理地址。有缺页。

参数
VPN0x1
TLB索引0x1
TLB标记0x0
TLB命中?(是/否)
缺页?(是/省)
PPN0x11

C.缺页

D.缺页

9.14

代码如下

#include <unistd.h>  
#include <stdio.h>  
#include <stdlib.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <sys/mman.h>  
#include <fcntl.h>    
int main(int argc, char const *argv[])  
{  int fd;  if ((fd = open("hello.txt", O_RDWR)) == -1) {perror("Failed to open hello.txt");  exit(EXIT_FAILURE);  }  struct stat stat_of_file;  if (fstat(fd, &stat_of_file) == -1) { perror("Failed to get stat of hello.txt");  exit(EXIT_FAILURE);  }    char *p;  if ((p = mmap(NULL, stat_of_file.st_size, PROT_WRITE, MAP_SHARED, fd, 0)) == (void *)-1) {perror("Failed to mmap");  exit(EXIT_FAILURE);  }  p[0] = 'J';  munmap(p, stat_of_file.st_size);close(fd);return 0;  
}

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48947.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp毕业设计—— 基于asp+access的网上聊天室设计与实现(毕业论文+程序源码)——网上聊天室

基于aspaccess的网上聊天室设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于aspaccess的网上聊天室设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴&…

基于SSH开发酒店客房管理系统+论文+任务书+PPT 课程设计 毕业设计

基于SSH开发酒店客房管理系统论文任务书PPT&#xff08;大作业/毕业设计&#xff09; 开发环境: Windows操作系统 开发工具&#xff1a;MyeclipseJdkTomcatMysql数据库 运行效果图&#xff1a; 基于SSH开发酒店客房管理系统论文任务书PPT&#xff08;大作业/毕业设计&#xff0…

基于Android的相关毕业设计和论文

基于Android的相关毕业设计和论文 今年整理了一下关于基于android的相关毕业设计的信息&#xff0c;这里和大家分享一下&#xff0c;总共分为5大模块&#xff1a; 一、基于android的毕业设计题目整理&#xff0c;供大家学习参考 基于Android的消防网格化管理系统设计 基于An…

一大波嵌入式毕业设计选题推荐(配套源码、文档、开发板)

可以在本文的末尾免费领取,以下所有项目配套的文档及源码~ 嵌入式毕业设计选题推荐一&#xff1a;智能猫眼 项目功能介绍&#xff1a; 1. 人脸识别&#xff1a;基于百度专业的深度学习算法和海量数据训练可进行人脸识别&#xff0c;轻松知晓访客身份&#xff1b; 2. 智能报警&a…

毕业设计——基于Qt的酒店在线管理系统客户端开发与设计

Qt版百度网盘链接&#xff1a;https://pan.baidu.com/s/122951Yta-rXSBNafS3ndlg 提取码&#xff1a;r2qq C#版链接&#xff1a;https://blog.csdn.net/qq_40945965/article/details/90229681 另一篇博文&#xff1a;基于Qt的酒店管理系统&#xff08;毕业设计&#xff09; 基…

日赚1.7亿!华为发布2020年度财报!附华为十大5G应用场景

今日&#xff0c;华为发布2020年年度报告。 公告显示&#xff1a;销售收入8,914亿元人民币&#xff0c;同比增长3.8%&#xff0c;净利润646亿元人民币&#xff0c;同比增长3.2%。 按一年365天来算&#xff0c;华为平均日赚1.7亿人民币&#xff01; 华为今日还公布了关于公司轮值…

3·8 妇女节特别策划 | 对话开源社里的“半边天”:多彩的她们,有别样的力量~...

三八妇女节 Womens Day < 2023/03/08 > 01 职场女性 陈阳 开源社理事长、微软云计算机与人工智能事业部首席产品经理 一句话介绍自己&#xff1a; 开源社区中的二进制女性 向上滑动阅览采访 Q1&#xff1a;能介绍一下自己目前正在做的职业或者项目嘛&#xff1f; 白天在…

出门问问冲刺IPO:年营收5亿 要做港股AIGC第一股

雷递网 雷建平 5月31日 AI公司出门问问&#xff08;Mobvoi Inc.&#xff09;日前递交招股书&#xff0c;准备在港交所上市。 当前&#xff0c;港股市场缺少AIGC概念&#xff0c;一旦上市&#xff0c;出门问问将成为港股AIGC第一股。 亚洲起步最早 年营收5亿 出门问问是一家以生…

数学奥赛VS信息奥赛 | 为孩子选择更好地升学之路!

随着社会的不断发展&#xff0c;在孩子成长学习中&#xff0c;家长越来越注重孩子的全面发展。从小学就开始为孩子规划竞赛学习&#xff0c;也是很多家长的选择&#xff0c;因为在学习的同时&#xff0c;也可以为以后高考自主招生提前做准备。 但是现在各种类目的竞赛&#xf…

小学奥数思维训练(一)

三年级 4 班组织去秋游&#xff0c;同学们自愿报名。该班一共有 40 名学生&#xff0c;其中 28 名同学报名参加&#xff0c;结果秋游当天去了 36 人&#xff0c;那么肯定有些学生变卦了&#xff08;报名了但是没来&#xff0c;或者没报名却来了&#xff09;&#xff0c;变卦的学…

一个基于ChatGPT的超级读书工具-司马阅(SmartRead)

这时候我强烈推荐一个基于ChatGPT的超级读书工具-司马阅(SmartRead)&#xff0c;它是颠覆我们读书学习方式的一种工具&#xff0c;帮你提取书中重要的知识点&#xff0c;可以以对话聊天的形式按照你的脉络读完它 。可以大大的提升学习工作效率。 先把工具网址放这儿&#xff1…

课程表插件Timetables

课程插件在vue项目中使用 项目中用到之前是用element-table做的,但要求课程一样的要合并单元格,于是啊找了这个插件,分享一下 参考地址: https://github.com/Hzy0913/Timetable 安装: npm install timetables 或者从上面github地址里面下载 Timetables.min.js 参数: 代码 …

Android 课程表

ClassScheduleView 横屏-课程表 预览 资源 名字资源AARclass_schedule_view.aarGiteeClassScheduleViewGitHubClassScheduleView Maven 1.build.grade | setting.grade repositories {...maven { url https://jitpack.io } }2./app/build.grade dependencies {implement…

HTML实现课表(表格运用)

题目要求&#xff1a; 根据表格知识完成下列效果图&#xff1a; 任务提示&#xff1a; 使用 <caption><caption>&#xff0c; <thead></thead> <tbody><tbody> <tfoot></tfoot> 等标签完成。 ps&#xff1a; 其中“课程表”为…

Web:学生课程表表格/用户注册表单

一.学生课程表 1.课程表模样 2.课程表html代码块 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewpo…

当年谷歌为什么退出中国?

《时代》周刊中&#xff0c;百度公司创始人兼CEO李彦宏成为封面人物&#xff0c;成为中国互联网登《时代》的第一人。 而专访中的一段话&#xff0c;却让一段往事再次成为了舆论热议的焦点。专访中&#xff0c;李彦宏表示&#xff0c;谷歌当年退出中国是因为迫于百度给予的市场…

如何处理亿级图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池&#xff0c;存有1亿图片。给一张目标图片&#xff0c;在图片池中做匹配。 判断一张图片是否在图片池中出现过。&#xff08;完全一样&#xff09;判断有没有相似的出现过。比如两张图相似度90&#xff0c;两张图片是在描述一件事情。 …

pgAdmin的数据导入之CSV

在向数据库批量导入数据时&#xff0c;可以参考此过程 1、对于现有的Excel文件&#xff0c;首先应另存为 .csv文件&#xff0c;记住分割符(逗号分割)&#xff0c;在后边导入用到。 2、用记事本打开保存后的csv文件&#xff0c;以utf-8格式另存为文件。不执行此编码格式&#xf…

ThinkPHP5 关于CSV文件的导入与导出

近期的应项目需求&#xff0c;需要用到数据的导入与导出&#xff0c;因为数据比较多&#xff0c;思来想去使用了CSV格式的文件&#xff0c;结合了网上各位大佬的文章&#xff0c;具体代码如下&#xff1a; 在thinkphp/library/think下新建Csv.php文件&#xff1a; <?php …

SQLyog Community如何正确导出CSV

第一步&#xff1a;选择导出 弹出Export As界面&#xff0c;将 前端添加列名称 选中&#xff08;不然导出的数据无列名&#xff09; 第二步&#xff1a;点击更改弹出指定转义字符界面&#xff0c;然后按图设置参数即可 注&#xff1a;变量长度->字段被终止&#xff0c;设置…