ELF文件学习 .bss

17 篇文章 0 订阅

参考

ELF格式与bss段

LINUX下目标文件的BSS段、数据段、代码段

ELF

ELF(Executable Linkable Format)是Linux系统下的一种可执行可链接文件的格式,是COFF格式的变种。在Linux系统中包括了可重定位文件(.o文件),可执行文件(/bin/bash文件),共享目标文件(.so)和核心转储文件(core dump)。

ELF文件头(ELF Header):位于ELF文件的头部,包含了描述整个文件的基本属性。
代码段(.text):用于存放程序代码,只读属性
数据段(.data):用于存放程序中经初始化的全局变量和静态局部变量,读写属性
bss段(.bss)(Block Started by Symbol):用于存放程序中未经初始化的全局变量和静态局部变量。在目标文件中,这个段并不占据实际空间,它仅仅只是一个占位符。

实验

// test1.c
int a = 1;
static int b = 4;
int c;
static int d;
char *s1 = "1234";
int main()
{
    int e = 2;
    char *s2 = "3456";
    return 0;
}

编译文件

gcc test1.c -o test1.o

查看编译后文件的信息

objdump -sx test1.o

摘取相关信息如下:

Sections:
Idx Name          Size      VMA               LMA               File off  Algn

 14 .rodata       0000000e  0000000000400550  0000000000400550  00000550  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA

 23 .data         00000020  00000000006008a8  00000000006008a8  000008a8  2**3
                  CONTENTS, ALLOC, LOAD, DATA
 24 .bss          00000010  00000000006008c8  00000000006008c8  000008c8  2**2
                  ALLOC

Sections展示了不同的段的大小。

SYMBOL TABLE:
00000000006008bc l     O .data  0000000000000004              b
00000000006008cc l     O .bss   0000000000000004              d
00000000006008c0 g     O .data  0000000000000008              s1
00000000006008d0 g     O .bss   0000000000000004              c
00000000006008b8 g     O .data  0000000000000004              a

SYMBOL TABLE展示了不同的变量是存在哪的。这里就可以看到
data段有:

  • 初始化了的全局变量a
  • 初始化了的静态变量b
  • 常量字符串s1

而bss段有:

  • 未初始化的全局变量c
  • 未初始化的静态变量d
Contents of section .rodata:
 400550 01000200 31323334 00333435 3600      ....1234.3456. 

Contents of section .data:
 6008a8 00000000 00000000 00000000 00000000  ................
 6008b8 01000000 04000000 54054000 00000000  ........T.@.....

可以看到rodata段中有我们定义的1234和3456
而data段里有1和4(小端)分别对应a和b

还可以读取elf文件,命令是readelf

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值