部分課件課后習題答案四章_第1頁
部分課件課后習題答案四章_第2頁
部分課件課后習題答案四章_第3頁
部分課件課后習題答案四章_第4頁
部分課件課后習題答案四章_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

習ELF2習ELF2ELF目標文件格式可重定位目標文件的.text節(jié)、.rodata節(jié)、.data節(jié)和.bss可執(zhí)行目標文件中的.text節(jié)、.rodata節(jié)、.data節(jié)和.bssC語言程序有兩個源文件:main.c和test.c4.234.233的符號表(.symtab節(jié))main.otest.o、該符號的類型是全局、外部還是本地符號、該符號出現(xiàn)在test.o中的哪個節(jié)(.text、.data或.bss)。在test.oi節(jié)/*test.cexternintintint int for(i=0;i<4;val+=return /*main.c inta[4]={1,2,3,externintintmain( returnval;}i在test.o的符號表中?在--節(jié)-i在test.o的符號表中?在--節(jié)-1234567889externintstaticint*bufp1;staticvoid{staticintvoidswap()}對于編譯生成的可重定位目標文件swap.o,填寫下表中各符號的情況,說明每個符號是否出現(xiàn)在swap.o中的哪個節(jié)(.text、.data或.bss)節(jié)節(jié)---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中的強符號有字節(jié),隨后兩個字節(jié)存放y,再后面兩個字節(jié)存放z。01230123xx=-1.5后,便將“-1.5BFF8000000000000H存放到了&x8個00000000H&&z32BFF80000H16BFF8H。如上右圖所示。因此,最終打印的結(jié)果如下:x=0,z=-16392(3)只要將文件proc1.c中的1行修改為“staticdoublex;”就可以使得proc1x設定為本地變量,從而在proc1.o的.data節(jié)中專門分配存放x8個字節(jié)空間,而不會和mainx共用同一個存儲地址。因此,也就不會破壞main中x和z的值。mj中對符號x的任意引用與模塊mi中定義的符號x關聯(lián)記為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節(jié)中,通常mainDisassemblyofsection0000000012340:1:89其中,55H是指令“pushebp”的機器碼,89E5H是指令“movespebp”的機器碼。因此,可m2printf語句中引用數(shù)組元素main[0]main[1]時,main[0]=55H,main[1]=89H??勺x寫數(shù)據(jù)段(Read/writedatasegment)的信息表明,該數(shù)據(jù)段對應虛擬存儲空間中起始地址為0x80494480x1040x4480xe8個4.25在可執(zhí)行目標文件中描述的“可讀寫數(shù)據(jù)段”由所有可重定位目標文件中的.data節(jié)合并生成的.data4.25在可執(zhí)行目標文件中描述的“可讀寫數(shù)據(jù)段”由所有可重定位目標文件中的.data節(jié)合并生成的.data因而其初始值必須記錄在可執(zhí)行文件中,而.bss節(jié)由未初始化的全局變量組成,因而在可執(zhí)行目標文件中4.25中的內(nèi)容可知,.data0xe8中長度為0x104字節(jié)的可讀寫數(shù)據(jù)段中,開始的0xe8個字節(jié)取自.data節(jié),后面的28字節(jié)是未初始化全局變a和b是可重定位目標文件或靜態(tài)庫文件,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要求根據(jù)對圖4.15main.o的.text節(jié)中需重定位的符號名、相對swap4.156行call4.15main.o中.text節(jié)和.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節(jié)和.rel.text節(jié)的內(nèi)容,圖中顯示.text節(jié)中共有6處需重定位。假定鏈接后生成的可執(zhí)行目標文件中buf和bufp0的存儲地址分別是仿照例子填寫下表,指出各個重定位的符號名、相對于.text123456123456(.bss)4.18swap.o4.18swap.o中.text節(jié)和.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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論