Я немного сбит с толку относительно того, где неинициализированные глобальные переменные находятся в файле ELF. У меня есть эта простая программа для проверки, в каких разделах будут расположены переменные:
const int a = 11;
int b = 10;
int c;
int main()
{
return 0;
}
Я знаю, что неинициализированная глобальная переменная должна быть помещена в раздел .bss файла ELF, но 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, когда она не инициализирована?