分析elf檔案:
首先編寫乙個.c檔案,並使用gcc -c xx.c -o xx.o 對其進行編譯。
我在這個實踐中是elf_1.o檔案。
接下來輸入ls -l elf_1.o 檢視重定位檔案的資訊。
接下來以十六進製制來檢視該檔案資訊。輸入:hexdump -x elf_1.o
顯示資訊的最左一列表示的是偏移位址的16進製表示。
檢視elf檔案頭定義的規範。開啟elf.h檢視各部分內容的定義。
我們可以看出,32位的系統與64位的系統的elf頭部分結構大致相同。只是個別欄位所占用的位元組個數有不同罷了。
分析一下elf頭:
第一行:第一部分:佔四個位元組。7f 45 4c 46
,應讀為4c 46 45 7f
,對應ascii碼elf.
,表示這是乙個elf物件。第二部分:佔乙個位元組。02
表示是乙個64位物件。
第三部分:佔乙個位元組。01
表示是小端表示法。第四部分:佔乙個位元組。01
表示檔案頭版本。
第二行中的第
三、四個位元組為0x003e 表示是x86-64的處理器。後四個位元組0x00000001,表示的是當前版本。後八個位元組表示程式的入口點,當前為0.
第四行中,第
七、八個位元組表示段頭大小為64位元組(40h),第
九、十字節表示段表的入口有13(0x000d)個。最後兩個位元組是表示段名串表(符號表)在段表中的索引號為10.
段表的分析:
32位系統的段表定義每個段頭大小是28h位元組,而64位系統則變成了64位元組(40h)。
40h*13=340h,elf檔案頭資料結構儲存在位偏移為0x0000000000000000-0x0000000000000039之間,而段表儲存在0x00000000000003f0-0x0000000000000340之間。
符號表的分析:
32位系統的符號表結構體大小是16位元組,而64位系統符號表結構體的大小為22個位元組。
由圖可知,一共15 個段表。
text.section 起始位置、大小如圖所示。
text.section是可執行指令的集合,offset=0x00000040,size =74h.
data.section是初始化後資料的集合,offset=0x000000b4,size=4h.
symtab.section是存放所有section名字的集合。offset=0x00000140,size=150h.
strtab.section是存放所有符號的名字的集合。offset=0x00000290,size=1eh.
ELF檔案分析
乙個程式要想執行,首先要載入到記憶體中,程式的pc指標指向記憶體中的 在執行的時候會使用記憶體中的資料。所以elf檔案主要包含 和資料。資料可以分為兩類 靜態資料。動態資料。什麼是動態資料?動態資料程式執行過程中產生,在堆或者棧上分配記憶體。而靜態資料則不然,靜態資料在 編譯完成後,就應該確定使用的...
ELF檔案格式分析
elf檔案 目標檔案 格式主要三種 1 可重定向檔案 檔案儲存著 和適當的資料,用來和其他的目標檔案一起來建立乙個可執行檔案或者是乙個共享目標檔案。目標檔案或者靜態庫檔案,即linux通常字尾為.a和.o的檔案 2 可執行檔案 檔案儲存著乙個用來執行的程式。例如bash,gcc等 3 共享目標檔案 ...
分析ELF程式的核心堆積 core dump 過程
概述 1 當程序接收到某些異常訊號導致退出時 會在程序的當前目錄下生成乙個名為 core 的檔案,將程序退出時的執行狀態堆積在該檔案中.2 elf 的堆積檔案與應用程式和共享庫的結構相同 包括 elf檔案頭 程式段描述符表和各段資料.堆積 檔案的第乙個段為注釋段 它順次堆積了處理機狀態 程序狀態 任...