程式從原始碼編譯為目標**的時候,這個目標檔案的格式是怎麼樣的?
elf目標檔案有**段,資料段和bss段。
elf目標檔案的標頭檔案,段表,重定位表,字串表,符號表,除錯表。
無論是可執行檔案,目標檔案或庫,它們實際上都是一樣基於段的檔案或是基於這種檔案的集合。
程式的源**經過編譯後,按照**和資料分別存放到相應的段中。編譯器(彙編器)還會將一些輔助性的資訊,諸如符號,重定位資訊等也按照表的方式存放的目標檔案中,而通常情況下,乙個表往往就是乙個段。
靜態鏈結的目的是將目標檔案組合起來形成乙個程式或更大的模組。
目標檔案格式
unix 最早的可執行檔案格式為a.out格式,它的設計非常的簡單,以至於後來共享庫這個概念出現的時候,a.out格式就變得捉襟見肘 於是人們設計了coff格式來解決這個問題,coff是由unix system v release 3首先提出並使用的格式規範,後來微軟公司基於coff格式,制定了pe...
目標檔案格式
在linux 0.12 系統中,gnu gcc 或gas 編譯輸出的目標模組檔案和鏈結程式生成的可執行檔案都使用了unix傳統的a.out格式。這是一種被稱為彙編與鏈結輸出 assembly linker editor output 的目標檔案格式。對於具有記憶體分頁機制的系統來說,這是一種簡單有效...
Linux鏈結 目標檔案格式
將各種 段和資料段收集組合成為乙個單一檔案的過程。鏈結器的出現使得構建大型軟體系統成為可能,因為它使得各個模組可以單獨完成編譯。當需要改進模組時,單獨的修改相應的模組並編譯,通過鏈結器重新鏈結生成新版本的軟體系統。sum.cpp中定義乙個函式int sum int a,int b main.cpp中...