1.elf全稱executable and linkable format,可執行連線格式,elf格式的檔案用於儲存linux程式。elf檔案(目標檔案)格式主要三種:
一般的 elf 檔案包括三個索引表:elf header,program header table,section header table。
在乙個elf檔案中有乙個section header table,通過它我們可以定位到所有的 section,而 elf header 中的e_shoff 變數就是儲存 section header table 入口對檔案頭的偏移量。而每個 section 都會對應乙個 section header ,所以只要在 section header table 中找到每個 section header,就可以通過 section header 找到你想要的 section。
下面以可執行檔案hello為例,以儲存**段的 section 為例來講解讀取某個section 的過程。
使用『vi /usr/include/elf.h 』命令檢視sections header的結構體:
由上面分析可知,section headers table中的每乙個section header所佔的size均為52位元組,elf header得到了e_shoff變數的值為0x1278,也就是table入口的偏移量,通過看e_shnum值為0x001f,表示段表入口有31個。
所以從0x00001278開始有31個段,每個段佔64個位元組大小,輸入 hexdump clare檢視:
我們用readelf 命令去檢視.text這個 section 中的內容,
輸入readelf –x 13 clare,(.text前面的標號為13)對13索引號的.text的section的內容進行檢視:
下面用 hexdump 的方法去讀取.text這個 section 中的內容,通過看section header中.text中offset和size分別是0x320和0x1b2,通過16進製制向10進製轉換得到offset:800和size:418。
輸入 hexdump –s 800 –n 418 –c clare
得到了和上面的readelf得到的相同。
使用下面命令對hello的文字段(.text)進行反彙編:
objdump –d hello 得到如下圖:
可以看出,使用反彙編的16進製制資料和前面查詢到的是相同的。
①.text section是可執行指令的集合,.data和.text都是屬於progbits型別的section,這是將來要執行的程式與**。
查詢段表可知.text section的位偏移為0x0000320,size為0x00001b2。
②.strtab section是屬於strtab型別的section,可以在檔案中看到,它存著字串,儲存著符號的名字。位偏移為0x00015fc,size為0x0000430。
③.symtab section存放所有section中定義的符號名字,比如「data_items」,「start_loop」。 .symtab section是屬於symtab型別的section,它描述了.strtab中的符號在「記憶體」中對應的「記憶體位址」。 位偏移為0x0001a2c,size為0x0000252。
④.rodata section,ro代表read only。位偏移為0x00004e8,size為0x0000010。
第四章實踐報告
7 1最優合併問題 1.問題描述 給定k 個排好序的序列,用 2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的 2 路合併演算法合併 2 個長度分別為m和n的序列需要m n 1 次比較。試設 計乙個演算法確定合併這個序列的最優合併順序,使所需的總比較次數最少。為了進行比較,還需要確定合併這...
ACM暑假實踐報告
acm培訓實踐報告 這一次的暑假我沒有參加什麼社會實踐活動,但是我參加了乙個非常有意義的比賽培訓,這次的培訓依然是由費老師帶隊,我們22名同學一起留校培訓,整個假期我們培訓了六周,不過有一周我回去了一周,因為學校檢修空調,恰好是三伏天,天氣非常炎熱,現在想想都佩服那些在三伏天都留在學校裡奮鬥的同學,...
第四章上機實踐報告
實踐題目 4 2 刪數問題 110 分 給定n位正整數a,去掉其中任意k n 個數字後,剩下的數字按原次序排列組成乙個新 的正整數。對於給定的n位正整數a和正整數 k,設計乙個演算法找出剩下數字組成的新數最 小的刪數方案。輸入格式 第 1 行是1 個正整數 a。第 2 行是正整數k。輸出格式 輸出最...