ELF文件格式


ELF是linux下的一种文件格式,类似WIN下的PE格式,包含有 .o 文件,.a 文件,.so 文件和可执行文件,还有core dump file(核心转储文件)

       前面有文件头,内容以段划分,主要可分为test段,data段,rodata段,bss段,堆栈段

额外:WIN下动态库为 .dll ,静态库为 .lib


调试工具:

objdump:跨平台的查看段的工具,在GCC编译工具里有

                 objdump -h :查看主要的段

                 objdump -x:查看更多的段

                 objdump -size :查看各个段的长度

                 objdump  -s -d:s以十六进制查看各个段,d以反汇编查看各个段

objcopy:跨平台工具,可以将文件转换为段数据。可以做为目标文件的一个段

readelf :linux下查看文件格式的工具,内容最详细

                readelf -h 可以看文件头

                readelf -S可以看段结构



一,文件头:

包含了ELF魔数(说明这是ELF格式的文件,WIN的PE也有自己的魔数),文件的机器位数,数据存储方式,版本,运行平台,ABI版本,ELF重定位位置类型,硬件平台,硬件平台版本,入口地址,程序头入口和长度,段表的位置和长度,段的数量

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1048 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         13
  Section header string table index: 10



           

二,段介绍:

段的标志:可用readelf -S查看




自定义段:

在程序中 __attribute__((section("name"))) 变量或函数 

               就可以指定对象放在自定义名字为 name 的段中


标准段:

1. 代码段

2. 数据段 data和只读数据段 rodata:存储初始化了的全局静态和局部静态变量,只读存储常量和字符串常量等

3. bss段:存储未被初始化的全局静态和局部静态变量,和初始化为0的上述,因为未被初始化的皆为0.bss段存储时空间一般是长度为0,只有在程序运行时才有空间

4. 重定位表:rela.data

5. 字符串表strtab:保存普通字符串

6. 段表字符串表shstrtab :保存段表中用到的字符串

7. common块:声明临时使用空间的大小,描述弱符号的参数空间大小等




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值