部分课件课后习题答案四章_第1页
部分课件课后习题答案四章_第2页
部分课件课后习题答案四章_第3页
部分课件课后习题答案四章_第4页
部分课件课后习题答案四章_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习ELF2习ELF2ELF目标文件格式可重定位目标文件的.text节、.rodata节、.data节和.bss可执行目标文件中的.text节、.rodata节、.data节和.bssC语言程序有两个源文件:main.c和test.c4.234.233的符号表(.symtab节)main.otest.o、该符号的类型是全局、外部还是本地符号、该符号出现在test.o中的哪个节(.text、.data或.bss)。在test.oi节/*test.cexternintintint int for(i=0;i<4;val+=return /*main.c inta[4]={1,2,3,externintintmain( returnval;}i在test.o的符号表中?在--节-i在test.o的符号表中?在--节-1234567889externintstaticint*bufp1;staticvoid{staticintvoidswap()}对于编译生成的可重定位目标文件swap.o,填写下表中各符号的情况,说明每个符号是否出现在swap.o中的哪个节(.text、.data或.bss)节节---C语言程序有两个源文件:main.c和proc1.c4.24b)proc1.c文a)main.c文4.245C语言程序有两个源文件:main.c和proc1.c4.24b)proc1.c文a)main.c文4.245在上述两个文件中,main.c中的强符号有x、z、main,弱符号有y;proc1.c中的强符号有字节,随后两个字节存放y,再后面两个字节存放z。01230123xx=-1.5后,便将“-1.5BFF8000000000000H存放到了&x8个00000000H&&z32BFF80000H16BFF8H。如上右图所示。因此,最终打印的结果如下:x=0,z=-16392(3)只要将文件proc1.c中的1行修改为“staticdoublex;”就可以使得proc1x设定为本地变量,从而在proc1.o的.data节中专门分配存放x8个字节空间,而不会和mainx共用同一个存储地址。因此,也就不会破坏main中x和z的值。mj中对符号x的任意引用与模块mi中定义的符号x关联记为REF(mj.x)→DEF(mi.x)请在下列空 void x=- #includeunsignedshorty,voidvoid printf(“x=%u,z=%d\n”,x,return /*m2.cintp1(){}(1)/*m1.c/*m2.cintp1(){}(1)/*m1.cintmain(){returnp1;} ①②③④(2)/*m1.cintx=100;intmain(){return}/*m2.c*/intmain=1;intp1(){}① ② ③ (3)/*m1.cintp1;int{returnx;}intx=10;intmain;intp1(){} ①②③④⑤(4)/*m1.cintx,y;intmain(){return/*m2.c*/inty;int{return}}① ② ③ ④ }}① ② ③ ④ ②REF(m2.main)→DEF( ③REF(m1.p1)→DEF( ②REF(m2.main)→DEF( . ③ ⑤ ①REF(m1.x)→DEF( ④ )或者 12345678/*m1.c*/12345678/*m2.c*/charmain[2];int{return}void{printf(“0x%x%x\n”,main[0],}main被定义在.text节中,通常mainDisassemblyofsection0000000012340:1:89其中,55H是指令“pushebp”的机器码,89E5H是指令“movespebp”的机器码。因此,可m2printf语句中引用数组元素main[0]main[1]时,main[0]=55H,main[1]=89H。可读写数据段(Read/writedatasegment)的信息表明,该数据段对应虚拟存储空间中起始地址为0x80494480x1040x4480xe8个4.25在可执行目标文件中描述的“可读写数据段”由所有可重定位目标文件中的.data节合并生成的.data4.25在可执行目标文件中描述的“可读写数据段”由所有可重定位目标文件中的.data节合并生成的.data因而其初始值必须记录在可执行文件中,而.bss节由未初始化的全局变量组成,因而在可执行目标文件中4.25中的内容可知,.data0xe8中长度为0x104字节的可读写数据段中,开始的0xe8个字节取自.data节,后面的28字节是未初始化全局变a和b是可重定位目标文件或静态库文件,a→bba引用的符号。对于以下,(3)p.o→libx.a→liby.a→libz.a同时gcc-static–opp.olibx.agcc-static–opp.olibx.aliby.agcc-static–opp.olibx.aliby.alibz.amain0x8048386main要求根据对图4.15main.o的.text节中需重定位的符号名、相对swap4.156行call4.15main.o中.text节和.rel.text Disassemblyofsection 00000000 1:89 3:83e4 6:e8fcffff 7 7:R_386_PC32 b:b8000000 Read-onlycodeLOADoff 0x00000000vaddr0x08048000paddr0x08048000align2**12filesz0x00000448memsz0x00000448flagsr-xRead/writedataLOADoff 0x00000448vaddr0x08049448paddr0x08049448align2**12filesz0x000000e8memsz0x00000104flagsrw-swap的起始地址就是0x8048398。ADDR(r_sym)–((ADDR(.text)+r_offset)-=0x8048398-((0x8048386+7)-(-4))=7、8、9、a处的call0700000011.图4.18给出了图4.7b所示的swap源代码对应的swap.o文件中.text节和.rel.text节的内容,图中显示.text节中共有6处需重定位。假定链接后生成的可执行目标文件中buf和bufp0的存储地址分别是仿照例子填写下表,指出各个重定位的符号名、相对于.text123456123456(.bss)4.18swap.o4.18swap.o中.text节和.rel.text Disassemblyofsection 00000000 1:89 3:83ec 6:c70500000000 d:0000 8: c: 10:a1000000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论