C 程式檔案

2021-07-24 08:35:27 字數 1706 閱讀 1773

elf 格式檔案是一種為 linux 系統所採用的通用檔案格式, 支援動態鏈結和重定位, 有很大的檔案頭

flat 格式檔案是扁平格式的檔案, 對檔案頭和一些段資訊做了簡化, 可執行程式小, 適於嵌入式系統

elf2flt 就是將 elf 格式轉換為 flt 格式, 在編譯器鏈結的時候可使用 「-elf2flt」 選項直接編譯出 flt 格式的可執行檔案

可重定位檔案(relocatable file), 包括使用者目標檔案和其他目標檔案(例如 *.o 或 lib*.a), 他們一起用於建立可執行檔案或者共享目標檔案

可執行檔案(executable file), 指編譯好的可執行檔案(例如 a.out), 用於生成程式映像, 載入記憶體執行

共享目標檔案, 指共享庫檔案(例如 lib*.so), 用於和其他共享目標檔案或者可重定位檔案一起生成 elf 目標檔案或者和執行檔案一起建立程式映像

elf 檔案參與程式的鏈結和執行, 所以可以從不同的角度來看待 elf 格式檔案的作用

如果用於編譯和鏈結(可重定位檔案), 則編譯器和鏈結器將把 elf 檔案看作是節頭表(section-headers)描述的節的集合, 程式頭表(program-headers)可選

如果用於載入執行(可執行檔案), 則載入器將把 elf 檔案看作是程式頭表(program-headers)描述的段的集合, 乙個段可能包含多個節, 節頭表(section-headers)可選

如果是共享目標檔案, 則兩者都含有, 因為編譯時需要共享庫中函式的宣告, 程式執行函式呼叫時也需要執行共享庫中的**

elf 檔案頭(file-header)描述 elf 檔案的總體資訊

系統相關: elf 檔案標識的魔術數, 以及硬體和平台等相關資訊, 增加了 elf 檔案的移植性, 使交叉編譯成為可能

型別相關: 可重定向檔案, 可執行檔案, 共享目標檔案

載入相關: 程式頭表(program-headers)的相關資訊

鏈結相關: 節頭表(section-headers)的相關資訊

使用 readelf -s 或 objdump -h 檢視程式頭表(段表)

使用 readelf -s 或 objdump -t 檢視符號表

使用 size 命令檢視各段大小

table

options

content

程式頭表(段表)

-l –program-headers –segments

顯示程式頭(段頭)資訊, 例如記錄 bss 段的大小, 即所有未初始化的變數的總大小

節頭表-s –section-headers –sections

顯示節頭資訊, 例如記錄 bss 段中每個未初始化的變數的大小

符號表-s –syms –symbols

顯示符號表段中的項

聯結器(ld)是將所有編譯器和彙編器的輸出檔案連線成乙個二進位制映象檔案的工具

二進位制映象檔案有很多種不同格式, 包括: flat, aout, coff, pe, elf 等

無論哪種格式, 鏈結輸出的檔案中都會出現三個區域:

text(code) **段, 唯讀, 儲存在磁碟映象檔案中

data 初始化資料段, 可讀可寫, 儲存在磁碟映象檔案中, 舉例來說,你在程式定義了乙個變數並給它賦值5,那麼這個「5」就被儲存在 data 區

bss 未初始化資料段, 可讀可寫, 它儲存著未賦任何值的陣列, 是乙個虛擬的區域, 只記錄大小, 本身不存在於二進位制映像中, 當二進位制映像被載入後存在於記憶體中

C 程式檔案

bin 目錄用來存放編譯的結果,bin是二進位制binrary的英文縮寫,因為最初c編譯的程式檔案都是二進位制檔案,它有debug和release兩個版本,分別對應的資料夾為bin debug和bin release,這個資料夾是預設的輸出路徑,我們可以通過 專案屬性 配置屬性 輸出路徑來修改。ob...

查詢程式檔案

查詢程式檔案 問題 檢查命令mkdir的程式檔案在 檢查命令ls的程式檔案在 檢查命令ifconfig的程式檔案在 檢查命令hostname的程式檔案在 嘗試查詢cd的程式檔案在 方案 利用which命令可以查詢命令的程式檔案在 一般適用於外部命令。利用echo命令可以輸出path變數的值,但需注意...

小程式檔案

小程式中有四種檔案,分別是wxml wxss js和json檔案。其中最重要的兩個是wxml和js檔案,乙個是頁面骨架,乙個是要實現頁面邏輯的。而wxss是渲染作用,要是可以難看點的話,那麼直接不要wxss檔案,json檔案相當於配置檔案,還可以存放一些測試的資料。接下來分別講一下wxml wxss...