一步步编写操作系统 46 linux的elf可执行文件格式1
ELF文件格式依然是分為文件頭和文件體兩部分,只是該文件頭相對稍顯復雜,類似層次化結構,先用個ELF header從“全局上”給出程序文件的組織結構,概要出程序中其它頭表的位置大小等信息,如程序頭表的大小及位置、節(jié)頭表的大小及位置。然后,各個段和節(jié)的位置、大小等信息再分別從“具體的”程序頭表和節(jié)頭表中予以說明。
ELF格式的作用體現(xiàn)在兩方面,一是鏈接階段,另一方面是運行階段,故它們在文件中組織布局咱們也從這兩方面展示,如圖:
無論是在待重定位文件,還是可執(zhí)行文件中,文件最開頭的部分必須是elf header,這就是前面咱們所說的固定的位置。在ELF header之后緊挨著的是程序頭表,這對于可執(zhí)行文件是必須存在的,而對于待重定位文件是可選的。其它成員的位置要取決于各頭表中的說明。坦白說,剛接觸elf之初并不容易理解它,所以,之后咱們會以一個實際例子來細說,這里咱們先有個籠統(tǒng)的認識。
咱們馬上要步入正題啦,在此之前必須要提前跟大伙兒交待一下,以下咱們書中有關elf的任何定義,包括變量、常量及取值范圍,都可以在linux系統(tǒng)的/usr/include/elf.h中找到,這里面的定義才是最全最權威的。為了方便大家學習,本書中從elf.h中搬了必要的部分,有的并不全面,只是起到幫助大家閱讀本書的作用。
一切就緒,咱們開始正式介紹elf結構。
一些重要的數據結構中用到了自定義的數據類型,所以先給大家介紹一下它們,免得造成學習的困擾,請大伙見表
好啦,現(xiàn)在咱們從上至下,依次揭開各層header的廬山真面目。咱們這里先介紹ELF header的結構。
c語言中的結構體能夠很直觀地表示物理內存結構,所以用結構體的形式展現(xiàn)一個數據結構是最合適不過的啦,所以咱們結合圖5-35,依次介紹下各結構體成員的意義。
e_ident[16]是16字節(jié)大小的數組,用來表示elf字符等信息,開頭的4個字節(jié)是固定不變的,是elf文件的魔數,它們分別是0x7f,以及字符串ELF的asc碼:0x45,0x4c,0x46。對于此數組說明如下表
總結
以上是生活随笔為你收集整理的一步步编写操作系统 46 linux的elf可执行文件格式1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纯白户办理信用卡能办下来吗
- 下一篇: 最近金价大涨创历史新高,还能买吗?有银行