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数据段以及其他段的字节对齐方式可以不一样呢?

原文地址:https://www.cnblogs.com/jrglinux/p/6942476.html