版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第4章Linux病毒技術-補充知識劉功申上海交通大學網(wǎng)絡空間安全學院SchoolofCyberScienceandEngineeringLinux可執(zhí)行文件格式(ELF)Elf也就是“ExecutableandLinkingFormat.”Elf起源于Unix,經(jīng)改進應用于FreeBSD和Linux等現(xiàn)有類Unix操作系統(tǒng)。微軟的PE格式也學習了ELF格式的優(yōu)點。ELF文檔服務于在不同的操作系統(tǒng)上目標文件的創(chuàng)建或者執(zhí)行文件的開發(fā)。它分以下三個部分:“目標文件”描述了ELF目標文件格式三種主要的類型?!俺绦蜓b載和動態(tài)連接”描述了目標文件的信息和系統(tǒng)在創(chuàng)建運行時程序的行為。“C語言庫”列出了所有包含在libsys中的符號、標準的ANSIC和libc的運行程序,還有l(wèi)ibc運行程序所需的全局的數(shù)據(jù)符號。三種主要類型:一個可重定位文件(relocatablefile)保存著代碼和適當?shù)臄?shù)據(jù),用來和其他的目標文件一起來創(chuàng)建一個可執(zhí)行文件或者是一個共享文件。一個可執(zhí)行文件(executablefile)保存著一個用來執(zhí)行的程序,該文件指出了exec(BA_OS)如何來創(chuàng)建程序進程映象。一個共享目標文件(sharedobjectfile)保存著代碼和合適的數(shù)據(jù),用來被下面的兩個鏈接器鏈接。第一個是鏈接編輯器,可以和其他的重定位和共享目標文件來創(chuàng)建另一個目標文件。第二個是動態(tài)鏈接器,聯(lián)合一個可執(zhí)行文件和其他的共享目標文件來創(chuàng)建一個進程映象。ELF的結構ELFheaderELFheaderProgramheadertable(optional)ProgramheadertableSection1Segment1…Segment2Sectionn……………SectionheadertableSectionheadertable(optional)ELF頭#defineEI_NIDENT16 typedefstruct{unsignedchar e_ident[EI_NIDENT];Elf32_Half e_type;Elf32_Half e_machine;Elf32_Word e_version;Elf32_Addr e_entry;Elf32_Off e_phoff;Elf32_Off e_shoff;Elf32_Word e_flags;Elf32_Half e_ehsize;Elf32_Half e_phentsize;Elf32_Half e_phnum;Elf32_Half e_shentsize;Elf32_Halfe_shnum;Elf32_Halfe_shstrndx;}Elf32_Ehdr;常用標示名稱偏移量目的EI_MAG00e_ident[EI_MAG0]toe_ident[EI_MAG3]:文件的前4個字符保存一個魔術數(shù)(magicnumber),用來確定該文件是否為ELF的目標文件。參見表7-7EI_MAG11EI_MAG22EI_MAG33EI_CLASS4e_ident[EI_CLASS],用來確定文件的類型或者說是容量。參見表1-8EI_DATA5e_ident[EI_DATA]指定了在目標文件中特定處理器數(shù)據(jù)的編碼方式。參見表1-9EI_VERSION6e_ident[EI_VERSION]表明了ELF頭的版本號。現(xiàn)在這個變量的值一定要設為EV_CURRENT,參見表7-5EI_OSABI7操作系統(tǒng)和ABI的標識EI_ABIVERSION8ABI版本EI_PAD9e_ident[EI_PAD]標識了在e_ident中開始的未使用的字節(jié),那些字節(jié)保留并被設置為0。程序把它們從目標文件中讀出但應該忽略。如果當前未被使用的字節(jié)有了新的定義,EI_PAD變量將會被改變。EI_NIDENT16e_ident[]的長度節(jié)一個目標文件的節(jié)頭表可以讓我們定位所有的節(jié)。節(jié)頭表是一個Elf32_Shdr結構的數(shù)組。一個節(jié)頭表的索引是這個數(shù)組的下標。ELF頭結構中的e_shoff成員給出了節(jié)頭表的偏移量(從文件開始計數(shù))。e_shnum告訴我們節(jié)頭表中包含了多少個表項;e_shentsize給出了每個表項的長度。某些節(jié)頭表索引是保留的,這些索引在目標文件中沒有與之對應的節(jié)。
typedefstruct{Elf32_Word sh_name;Elf32_Word sh_type;Elf32_Word sh_flags;Elf32_Addr sh_addr;Elf32_Off sh_offset;Elf32_Word sh_size;Elf32_Word sh_link;Elf32_Word sh_info;Elf32_Word sh_addralign;Elf32_Word sh_entsize;}Elf32_Shdr;字符串表字符串表節(jié)(Stringtablesections)保存著以NULL終止的一系列字符,一般我們稱為字符串。目標文件使用這些字符串來表示符號和節(jié)名。一個字符串的引用是一個字符串表節(jié)的索引。字符表一個目標文件的符號表(symboltable)保存了定位和重定位程序的定義和引用的信息。一個符號表索引是相應的下標。0表項特指了該表的第一個表項,就象未定義的符號索引一樣。重定位重定位(Relocation)是鏈接符號引用和符號定義的過程。當一個程序調(diào)用一個函數(shù)的時候,相關的調(diào)用必須在執(zhí)行時把控制傳送到正確的目標地址。換句話說,重定位文件應當包含如何修改他們的節(jié)內(nèi)容的信息,從而允許可執(zhí)行文件或共享目標文件為一個進程的程序映像保存正確的信息。程序頭一個可執(zhí)行的或共享的目標文件的程序頭表是一個結構數(shù)組,每一個結構描述一個段或其他系統(tǒng)準備執(zhí)行該程序所需要的信息。一個目標文件段包含一個或多個部分。程序頭僅僅對于可執(zhí)行或共享的目標文件有意義。typedefstruct{Elf32_Word p_type;Elf32_Off p_offset;Elf32_Addr p_vaddr;Elf32_Addr p_paddr;Elf32_Word p_filesz;Elf32_Word p_memsz;Elf32_Word p_flags;Elf32_Word p_align;}Elf32_Phdr;段內(nèi)容實例TextSegmentDataSegment程序載入當創(chuàng)建或增加一個進程映像的時候,系統(tǒng)在邏輯上將拷貝一個文件的段到一個虛擬的內(nèi)存段。動態(tài)鏈接程序解釋器(ProgamInterpreter)系統(tǒng)為解釋器“編寫”了一個內(nèi)存映像,而不是使用原始的可執(zhí)行文件的段映像。此時該解釋器就負責接收來自系統(tǒng)的控制并且為應用程序提供一個環(huán)境變量。動態(tài)鏈接器(DynamicLinker)當使用動態(tài)鏈接方式建立一個可執(zhí)行文件時,鏈接器把一個PT_INTERP類型的元素加到可執(zhí)行文件中,告訴系統(tǒng)像該系統(tǒng)的解釋器一樣調(diào)用動態(tài)鏈接器。動態(tài)節(jié)(DynamicSection)如果一個目標文件參與動態(tài)的鏈接,它的程序頭表將有一個類型為PT_DYNAMIC的元素。該“段”包含了.dynamic節(jié)。一個_DYNAMIC特別的符號,表明了該節(jié)包含了以下結構的一個數(shù)組。共享目標的依賴關系(SharedObjectDependencies)當鏈接器處理一個文檔庫時,它取出庫中成員并且把它們拷貝到一個輸出的目標文件中。當運行時沒有包括一個動態(tài)鏈接器的時候,那些靜態(tài)的鏈接服務是可用的。共享目標也提供服務,動態(tài)鏈接器必須把正確的共享目標文件鏈接到要執(zhí)行的進程映象中。因此,可執(zhí)行文件和共享的目標文件之間存在著明確的依賴性。全局偏移量表(GlobalOffsetTable,GOT)全局偏移量表在私有數(shù)據(jù)中保存著絕對地址,所以在不影響位置無關性和程序代碼段共享能力的情況下應該使地址是可用的。一個程序參考它的GOT(使用位置無關的地址)并提取絕對的地址,所以與重定向無關的位置定位到絕對的位置。PLT過程連接表(ProcedureLinkageTable)PLT過程鏈接表重定向那些與位置無關的函數(shù)調(diào)用到絕對的地址。簡單的C程序及其ELF格式信息intxx,yy;main(){xx=1;yy=2;printf("xx%dyy%d\n",xx,yy);}ELF頭信息root#objdump-fa.outa.out:fileformatelf32-i386architecture:i386,flags0x00000112:EXEC_P,HAS_SYMS,D_PAGEDstartaddress0x080483dc程序頭ProgramHeader:PHDRoff0x00000034vaddr0x08048034paddr0x08048034align2**2filesz0x000000c0memsz0x000000c0flagsr-xINTERPoff0x000000f4vaddr0x080480f4paddr0x080480f4align2**0filesz0x00000019memsz0x00000019flagsr--LOADoff0x00000000vaddr0x08048000paddr0x08048000align2**12filesz0x00000564memsz0x00000564flagsr-xLOADoff0x00000564vaddr0x08049564paddr0x08049564align2**12filesz0x000000a8memsz0x000000ccflagsrw-DYNAMICoff0x0000059cvaddr0x0804959cpaddr0x0804959calign2**2filesz0x00000070memsz0x00000070flagsrw-NOTEoff0x00000110vaddr0x08048110paddr0x08048110align2**2filesz0x00000018memsz0x00000018flagsr--Dynamic節(jié)DynamicSection:NEEDEDlibc.so.4INIT0x8048390FINI0x8048550HASH0x8048128STRTAB0x80482c8SYMTAB0x80481b8STRSZ0xadSYMENT0x10DEBUG0x0PLTGOT0x8049584PLTRELSZ0x18PLTREL0x11JMPREL0x8048378Needtolinkthissharedlibraryforprintf()節(jié)頭表Sections:IdxNameSizeVMALMAFileoffAlgn0.interp00000019080480f4080480f4000000f42**0CONTENTS,ALLOC,LOAD,READONLY,DATA1.note.ABI-tag000000180804811008048110000001102**2CONTENTS,ALLOC,LOAD,READONLY,DATA2.hash000000900804812808048128000001282**2CONTENTS,ALLOC,LOAD,READONLY,DATA3.dynsym00000110080481b8080481b8000001b82**2CONTENTS,ALLOC,LOAD,READONLY,DATA4.dynstr000000ad080482c8080482c8000002c82**0CONTENTS,ALLOC,LOAD,READONLY,DATA5.rel.plt000000180804837808048378000003782**2CONTENTS,ALLOC,LOAD,READONLY,DATA6.init0000000b0804839008048390000003902**2CONTENTS,ALLOC,LOAD,READONLY,CODE7.plt000000400804839c0804839c0000039c2**2CONTENTS,ALLOC,LOAD,READONLY,CODE8.text00000174080483dc080483dc000003dc2**2 CONTENTS,ALLOC,LOAD,READONLY,CODE
節(jié)頭表(cont’d)
9.fini000000060804855008048550000005502**2CONTENTS,ALLOC,LOAD,READONLY,CODE10.rodata0000000e0804855608048556000005562**0CONTENTS,ALLOC,LOAD,READONLY,DATA11.data0000000c0804956408049564000005642**2CONTENTS,ALLOC,LOAD,DATA12.eh_frame000000040804957008049570000005702**2CONTENTS,ALLOC,LOAD,DATA13.ctors000000080804957408049574000005742**2CONTENTS,ALLOC,LOAD,DATA14.dtors000000080804957c0804957c0000057c2**2CONTENTS,ALLOC,LOAD,DATA15.got000000180804958408049584000005842**2CONTENTS,ALLOC,LOAD,DATA16.dynamic000000700804959c0804959c0000059c2**2CONTENTS,ALLOC,LOAD,DATA17.bss000000240804960c0804960c0000060c2**2ALLOC18.stab000001bc00000000000000000000060c2**2CONTENTS,READONLY,DEBUGGING19.stabstr000003880000000000000000000007c82**0CONTENTS,READONLY,DEBUGGING20.comment000000c8000000000000000000000b502**0符號表SYMBOLTABLE:080480f4ld.interp0000000008048110ld.note.ABI-tag0000000008048128ld.hash00000000080481b8ld.dynsym00000000080482c8ld.dynstr0000000008048378ld.rel.plt0000000008048390ld.init000000000804839cld.plt00000000080483dcld.text0000000008048550ld.fini0000000008048556ld.rodata0000000008049564ld.data0000000008049570ld.eh_frame0000000008049574ld.ctors000000000804957cld.dtors0000000008049584ld.got000000000804959cld.dynamic00000000符號表(cont’d)0804960cld.bss0000000000000000ld.stab0000000000000000ld.stabstr0000000000000000ld.comment0000000000000000ld.note0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ld*ABS*0000000000000000ldf*ABS*00000000crtstuff.c08048460l.text00000000gcc2_compiled.08049568lO.data00000000p.30804957clO.dtors00000000__DTOR_LIST__0804956clO.data00000000completed.408048460lF.text00000000__do_global_dtors_aux08049570lO.eh_frame00000000__EH_FRAME_BEGIN__符號表(cont’d)080484b4lF.text00000000fini_dummy0804960clO.bss00000018object.11080484bclF.text00000000frame_dummy080484e0lF.text00000000init_dummy08049570lO.data00000000force_to_data08049574lO.ctors00000000__CTOR_LIST__00000000ldf*ABS*00000000crtstuff.c08048520l.text00000000gcc2_compiled.08048520lF.text00000000__do_global_ctors_aux08049578lO.ctors00000000__CTOR_END__08048548lF.text00000000init_dummy08049570lO.data00000000force_to_data08049580lO.dtors00000000__DTOR_END__08049570lO.eh_frame00000000__FRAME_END__00000000ldf*ABS*00000000p10.c080483acF*UND*00000031printf0804959cgO*ABS*00000000_DYNAMIC08048550gO*ABS*00000000_etext08048390gF.init00000000_init08049624gO.bss00000004environ00000000w*UND*00000000__deregister_frame_info08049630gO*ABS*00000000end08049628gO.bss00000004xx符號表(cont’d)08049564gO.data00000004__progname080483dcgF.text00000083_start0804960cgO*ABS*00000000__bss_start080484e8gF.text00000038main08048550gF.fini00000000_fini0804962cgO.bss00000004yy080483bcF*UND*00000070atexit0804960cgO*ABS*00000000_edata08049584gO*ABS*00000000_GLOBAL_OFFSET_TABLE_08049630gO*ABS*00000000_end080483ccF*UND*0000005bexit00000000w*UND*00000000__register_frame_info動態(tài)符號表DYNAMICSYMBOLTABLE:080483acDF*UND*00000031printf0804959cgDO*ABS*00000000_DYNAMIC08048550gDO*ABS*00000000_etext08048390gDF.init00000000_init08049624gDO.bss00000004environ0000000
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版公路修建人工勞務協(xié)議模板版B版
- 家庭早期教育與社交技能的結合應用
- 2024至2030年上海豬肉松香料項目投資價值分析報告
- 家庭環(huán)境下的體育教育活動實踐與探索
- 網(wǎng)頁星制作課程設計
- 二零二五年定制版貴金屬珠寶首飾加工定作、銷售及物流服務合同3篇
- 2024模具行業(yè)節(jié)能減排技術應用合同范本3篇
- 2024年采購合同增補條款專項合同版B版
- 家庭醫(yī)生服務模式創(chuàng)新提升患者滿意度的新途徑
- 菱形課程設計
- DL∕T 1100.1-2018 電力系統(tǒng)的時間同步系統(tǒng) 第1部分:技術規(guī)范
- CJ/T 158-2002 城市污水處理廠管道和設備色標
- NB-T35009-2013抽水蓄能電站選點規(guī)劃編制規(guī)范
- 曳引驅(qū)動電梯調(diào)試作業(yè)指導書
- 上海市中考英語試卷及答案
- 基礎會計課程思政教案設計
- 蘇教版科學小學五年級上冊期末測試卷及完整答案(奪冠系列)
- 監(jiān)控工程竣工驗收報告
- 經(jīng)皮肝穿刺膽道引流(PTCD)導管的護理要點
- 國家開放大學《心理學》形考任務1-4參考答案
- 2024年社會工作者《社會工作實務(中級)》考試真題必考題
評論
0/150
提交評論