首页 > 代码库 > Linux下利用objdump查看文件空间地址分布
Linux下利用objdump查看文件空间地址分布
在linux中新建test.c文件,源代码如下:
1 #include<stdio.h> 2 int a=1; 3 int main() 4 { 5 printf("a is %d.",a); 6 return 0; 7 }
然后分别生成test.o和test文件
$ gcc -c test.c
$ gcc -o test test.c
利用objdump命令分别查看test.o和test
首先看test.o
file format elf64-x86-64:文件所在平台属性,这里是64位x86处理器平台
Sections:
Size: 段的大小,字节为单位
VMA: 段在虚拟地址中的位置
LMA:段在加载地址中的位置
File off: File offset,段的起始位置
Algn:字节对齐方式,2**2表示2的平方即为4,2**3表示2的3次方即为8
这里面重要的有
.text(代码段)
.data(数据段)
.bss
查看test文件的空间位置:
段的数量明显多于未链接文件test.o
我们将test.c代码复制到test1.c文件,并稍加修改
可以看到,.text代码段和.data数据段大小都增加了,
.text代码段增大了9字节(22变为31)
.data数据段增加了一个int型4字节变量大小(源代码中int b=2,多了一个变量b)
注意.data的File off起始位置为00000074,而不是00000071,这是字节对齐而导致的
有个待解答问题:
为什么.text代码段和.data数据段以及其他段的字节对齐方式可以不一样呢?
Linux下利用objdump查看文件空间地址分布
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。