华域联盟 Linux 基于linux程序中段的学习总结详解

基于linux程序中段的学习总结详解

linux程序的段陆陆续续接触过一些,今天适当的总结一下,时间仓促,总结的比较零散。


linux 段:
text:已编译程序的机器代码。

.rodata:只读数据。printf中的格式串,或者开关语句的跳转表。

data:已初始化的全局变量。

bss:未初始化的全局变量。

symtab:符号表。


注意:
1、如果定义一个全局变量,int i = 0;它被初始化为0,但是,它却不是放在data段中的,而是放在bss段中的。因为编译器可能会做一些优化,如果初始化为0,则它会将它等同于未初始化的变量。这样的可能要求他会将所有未初始化的全局变量(bss段)初始化为0。――但是这个可能会和编译器有关系。

2、对于static全局变量,它在符号表中有一个属性表示他是local的,不是global。local的符号式不允许被其他的文件引用的。

3、static定义的局部变量,编译器会把它作为static全局变量来处理。它在符号表中是出现的(局部变量是不出现的)。唯一不同的是,它会把它在符号表中的名字改掉,一般会增加一个后缀:“.1788”。用这种方法来防止和其他的全局变量重名。而且也可以防止对它的调用。

4、段是有对齐的。如果定义一个char字符,会发现它有时会增加四个字节,之后定义,段大小便不再增加。

5、查看程序段的工具包括:readelf,objdump(加上-t可以查看变量属于哪个段),size(可以查看各个段的大小。)

本文由 华域联盟 原创撰写:华域联盟 » 基于linux程序中段的学习总结详解

转载请保留出处和原文链接:https://www.cnhackhy.com/45783.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部