日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

elf是什么意思 elf是什么意思英語


elf是什么意思 elf是什么意思英語




本文介紹了ELF的基本結(jié)構(gòu)和內(nèi)存加載的原理,并用具體案例來分析如何通過ELF特性實(shí)現(xiàn)HIDS bypass、加固/脫殼以及輔助進(jìn)行binary fuzzing 。
前言作為一個(gè)安全研究人員,ELF可以說是一個(gè)必須了解的格式 , 因?yàn)檫@關(guān)系到程序的編譯、鏈接、封裝、加載、動(dòng)態(tài)執(zhí)行等方方面面 。有人就說了 , 這不就是一種文件格式而已嘛 , 最多按照SPEC實(shí)現(xiàn)一遍也就會(huì)了,難道還能復(fù)雜過FLV/MP4?曾經(jīng)我也是這么認(rèn)為的 , 直到我在日常工作時(shí)遇到了下面的錯(cuò)誤:
$ r2 a.outSegmentation fault作為一個(gè)開源愛好者,我的 radare2 經(jīng)常是用master分支編譯的,經(jīng)過在github中搜索,發(fā)現(xiàn)radare對(duì)于ELF的處理還有不少同類的問題,比如 issue#17300 以及 issue#17379  , 這還只是近一個(gè)月內(nèi)的兩個(gè)open issue,歷史問題更是數(shù)不勝數(shù) 。
總不能說radare的開發(fā)者不了解ELF吧?事實(shí)上他們都是軟件開發(fā)和逆向工程界的專家 。不止radare , 其實(shí)IDA和其他反編譯工具也曾出現(xiàn)過各類 ELF相關(guān)的bug。
說了那么多,只是為了引出一個(gè)觀點(diǎn): ELF既簡單也復(fù)雜,值得我們?nèi)ド钊肓私?。網(wǎng)上已經(jīng)有了很多介紹ELF的文章,因此本文不會(huì)花太多篇幅在SPEC的復(fù)制粘貼上,而是結(jié)合實(shí)際案例和應(yīng)用場(chǎng)景去進(jìn)行說明 。
ELF 101ELF的全稱是 Executable and Linking Format ,這個(gè)名字相當(dāng)關(guān)鍵 , 包含了ELF所需要支持的兩個(gè)功能——執(zhí)行和鏈接 。不管是ELF,還是Windows的 PE  , 抑或是MacOS的 Mach-O  , 其根本目的都是為了能讓處理器正確執(zhí)行我們所編寫的代碼 。
大局觀在上古時(shí)期 , 給CPU運(yùn)行代碼也不用那么復(fù)雜,什么代碼段數(shù)據(jù)段,直接把編譯好的機(jī)器碼一把梭燒到中斷內(nèi)存空間,PC直接跳過來就執(zhí)行了 。但隨著時(shí)代變化,大家總不能一直寫匯編了,即便編譯器很給力,也會(huì)涉及到多人協(xié)作、資源復(fù)用等問題 。這時(shí)候就需要一種可拓展(Portable)的文件標(biāo)準(zhǔn) , 一方面讓開發(fā)者(編譯器/鏈接器)能夠高效協(xié)作,另一方面也需要系統(tǒng)能夠正確、安全地將文件加載到對(duì)應(yīng)內(nèi)存中去執(zhí)行,這就是ELF的使命 。

從大局上看,ELF文件主要分為3個(gè)部分:
ELF HeaderSection Header TableProgram Header Table其中,ELF Header 是文件頭,包含了固定長度的文件信息; Section Header Table 則包含了 鏈接時(shí) 所需要用到的信息; Program Header Table 中包含了 運(yùn)行時(shí) 加載程序所需要的信息,后面會(huì)進(jìn)行分別介紹 。
ELF HeaderELF頭部的定義在 elf/elf.h 中(以glibc-2.27為例),使用POD結(jié)構(gòu)體表示,內(nèi)存可使用結(jié)構(gòu)體的字段一一映射 , 頭部表示如下:
#define EI_NIDENT (16)typedef struct{unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */Elf32_Half e_type;/* Object file type */Elf32_Half e_machine;/* Architecture */Elf32_Word e_version;/* Object file version */Elf32_Addr e_entry;/* Entry point virtual address */Elf32_Off e_phoff;/* Program header table file offset */Elf32_Off e_shoff;/* Section header table file offset */Elf32_Word e_flags;/* Processor-specific flags */Elf32_Half e_ehsize;/* ELF header size in bytes */Elf32_Half e_phentsize;/* Program header table entry size */Elf32_Half e_phnum;/* Program header table entry count */Elf32_Half e_shentsize;/* Section header table entry size */Elf32_Half e_shnum;/* Section header table entry count */Elf32_Half e_shstrndx;/* Section header string table index */} Elf32_Ehdr;注釋都很清楚了,挑一些比較重要的來說 。其中 e_type 表示ELF文件的類型,有以下幾種:

推薦閱讀