1. 程式人生 > >Linux下利用objdump查看文件空間地址分布

Linux下利用objdump查看文件空間地址分布

nbsp ima section 次方 平臺 size linux中 源代碼 turn

在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查看文件空間地址分布