Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux系統常見問題解答 >> linux目標文件ELF的格式

linux目標文件ELF的格式

日期:2017/1/20 17:36:46      編輯:Linux系統常見問題解答
1 <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">   </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">現在PC上流行的可執行文件格式主要是windows下的PE和linux下的ELF文件,他們都是COFF格式文件變種。目標文件時源代碼編譯後但未進行鏈接的那些中間文件,它跟可執行文件的格式幾乎沒有什麼區別,因此目標文件(.o文件)也和可執行文件使用一樣的儲存格式。</span>

 

在linux中除了可執行文件還有幾種文件也是使用ELF格式儲存的,其中包括動態庫文件(.so),可重定位文件(.o),核心轉儲文件(進程終止時系統將一些進程信息儲存到該類型的文件)。我們可以使用file命令查看文件類型 eg:

 

? 1 2 3 xiang@xiang:~/workspace/linux$ file prim prim: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd54ce2ecedb22482c79f597093ff8c0b8f7c7113, not stripped xiang@xiang:~/workspace/linux$ 關於ELF文件的格式,其中包含了文件頭(file header),代碼段(.text),數據段(.data)未初始化數據段(.bss)等,通過objdump 命令可以查看各個段的信息。

 

 

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 xiang@xiang:~/workspace/algorithm$ g++ -c prim.cpp -o prim.o xiang@xiang:~/workspace/algorithm$ objdump -h prim.o   prim.o:     file format elf32-i386   Sections: Idx Name          Size      VMA       LMA       File off  Algn   0 .text         0000031f  00000000  00000000  00000034  2**2                   CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE   1 .data         00000000  00000000  00000000  00000354  2**2                   CONTENTS, ALLOC, LOAD, DATA   2 .bss          003d3c21  00000000  00000000  00000360  2**5                   ALLOC   3 .rodata       00000008  00000000  00000000  00000360  2**2                   CONTENTS, ALLOC, LOAD, READONLY, DATA   4 .ctors        00000004  00000000  00000000  00000368  2**2                   CONTENTS, ALLOC, LOAD, RELOC, DATA   5 .comment      0000002c  00000000  00000000  0000036c  2**0                   CONTENTS, READONLY   6 .note.GNU-stack 00000000  00000000  00000000  00000398  2**0                   CONTENTS, READONLY   7 .eh_frame     000000dc  00000000  00000000  00000398  2**2                   CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA xiang@xiang:~/workspace/algorithm$ objdump -h prim 1,文件頭(file header)在文件頭中包含了文件的魔數,機器字長,版本,運行平台,文件類型,入口地址,短信息等內容,其中魔數用於告訴系統文件的類型,如ELF文件的魔數就是DEL符+ELF,
Copyright © Windows教程網 All Rights Reserved