linux查看程序bss段,LINUX下目标文件的BSS段、数据段、代码段

操做系统:ubuntu 13.04

工具:gcc, objdump, readelf

参考:《程序员自我修养》

代码编译后的机器指令常常被放在代码段里,代码段名为".text";已初始化的全局变量和已初始化的局部静态变量常常放在数据段里,数据段名为".data";未初始化的全局变量和未初始化局部静态变量通常放在“.bss”段里,.bss在文件中不占据空间。字符串常量通常放在“.rodata”段里。

经过代码编译后查看文件内部结构来论证一下上面观点,代码以下:

代码:程序员

点击(此处)折叠或打开ubuntu

int printf(const char* format, ...);

int global_init_var = 84; //已初始化的全局变量

int global_uninit_var;    //未初始化的全局变量

char *str1 = "hello world!"; //字符串常量

void func1(int i)

{

printf("%d\n", i);

}

int main(void)

{

static int static_var = 85; //已初始化的静态局部变量

static int static_var2;     //未初始化的静态局部变量

char *str2 = "22222";       //字符串常量

int a = 1;

int b;

func1(static_var+static_var2+a+b);

return a;

}

上面代码保存为1.c,编译生成目标文件1.o:c#

点击(此处)折叠或打开sass

gcc -c 1.c

使用objdump来查看目标文件的结构和内容,命令以下:

工具

点击(此处)折叠或打开ui

objdump -s -d 1.o

目标文件结构和内容以下(只保留.bss段、.text段、.data段、.rodata段):操作系统

点击(此处)折叠或打开.net

1.o: file format elf32-i386

Contents of section .text:

0000 5589e583 ec188b45 08894424 04c70424 U......E..D$...$

0010 0d000000 e8fcffff ffc9c355 89e583e4 ...........U....

0020 f083ec20 c7442414 11000000 c7442418 ... .D$......D$.

0030 01000000 8b150800 0000a1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值