挖掘SimpleSection.o

int printf(const char* format,...);
int global_init_var = 84;
int global_uninit_var;

void func1(int i)
{
    printf("%d\n", i );
}

int main(void)
{  
    static int static_var = 85;
    static int static_var2;
    int a=1;
    int b;
    func1(static_var+static_var2+a+b);
    return a;

}

---------------------------------------------------------------------------------------------------------

用GCC来编译(参数-c表示只编译不链接):$ gcc -c SimpleSection.c

用objdump来查看object内部的结构:$ objdump -h SimpleSection.o (-h打印各个段的基本信息)

 

.rodata只读数据段,存放字符串常量和只读变量(如const修饰的变量)

.comment注释信息段

.note.GNU-stack堆栈提示段

.eh_frame


CONTENTS表示该段在文件中存在。可得.bss在ELF文件中不存在内容

----------------------------------------------------------------------------------------------------------

objdump的“-s”可以将所有段的内容以十六进制的方式打印出来;“-d”可以将所有包含指令的段反汇编。


.text段里包含且仅包含函数func1()和main()的指令。



---------------------------------------------------------------------------------------------------------------

.data段保存已经初始化了的全局变量和局部静态变量,global_init_var和static_var共8字节。

.rodata段存放字符串常量“%d\n”,4字节。

----------------------------------------------------------------------------------------------------------------

.bss段存放未初始化的全局变量和局部静态变量,但此处该段大小只有4字节。

global_uninit_var没有被存放在任何段,只是一个未定义的“COMMON符号”,只是预留一个未定义

的全局变量符号,等到最终链接时再在.bss段分配空间。(与编译器有关)

但,编译单元内部可见的静态变量的确存放在.bss段。




----------------------------------------------------------------------------------------------------------------

编译器的优化



0认为是未初始化的,优化后放在了.bss段。

-----------------------------------------------------------------------------------------------------------------

自定义段

在全局变量或函数之前加上“_attribute_((section("section_name")))”属性即可将其放到指定的段中。

_attribute_((section("FOO"))) int global = 42;

_attribute_((section("BAR"))) void foo() {}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值