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數據段以及其他段的字節對齊方式可以不一樣呢?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM