2
對於未初始化的全局變量在ELF文件中的位置,我有點困惑。我有這個簡單的程序測試,其中部分變量將位於:未初始化的全局數據部分是什麼?
const int a = 11;
int b = 10;
int c;
int main()
{
return 0;
}
我知道,未初始化的全局變量應該放在ELF文件的.bss段,但objdump的-H給我下面的輸出:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000000a 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000004 00000000 00000000 00000040 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000044 2**2
ALLOC
3 .rodata 00000004 00000000 00000000 00000044 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .comment 00000024 00000000 00000000 00000048 2**0
CONTENTS, READONLY
5 .note.GNU-stack 00000000 00000000 00000000 0000006c 2**0
CONTENTS, READONLY
所以變量a轉到.rodata,b轉到.data,c無處可去?當我改變代碼:
int c = 0;
一切都如預期 - .bss段具有長度爲4,但與變量c會發生什麼時,未初始化的呢?
我看到了......所以加載程序知道需要爲「常見」變量保留多少空間的唯一方法是查看ELF文件中的符號? – bialpio 2011-03-26 18:40:27