Адресное пространство пространства разделов .bss в файле elf

Если я правильно понимаю, создав раздел .bss введите (как показано в примере кода) область записи / чтения .bss раздел от смещения раздела в файле N и в этом случае phdr.p_memsz увеличивается на N байт, и это до операционной системы / ядра обнулить эту область памяти. Правильно ли мое понимание?

    Elf32_Phdr phdr;
// ...
phdr.p_memsiz = somevalue;
Elf32_Shdr sec;
// ...
sec.sh_name   = bss_name;
sec.sh_type   = SHT_nobits;
sec.sh_flags  = SHF_alloc + SHF_write;
sec.sh_size = N;
phdr.p_memsiz += N;

0

Решение

Да, ОС заполнит раздел .bss нулями.

В общем, Linux (и другие версии Unix) в любом случае будут обнулять все «новые» страницы в процессе, чтобы избежать утечки контента от «предыдущего владельца» (воспринимайте это как уничтожение вашей утилизации).

Редактировать:

В конечном итоге компоновщик и загрузчик несут ответственность за фактическое расположение раздела .bss. Как правило, это в конце раздела данных, как описано в спецификации 1.2 ELF, рисунок 2.5.

Как описывает «Разделы», раздел .bss имеет тип SHT_NOBITS,
Хотя он не занимает места в файле, он способствует
образ памяти сегмента. Обычно эти неинициализированные данные находятся в
конец сегмента, тем самым делая p_memsz больше, чем p_filesz,

(В другом месте это объясняет, что контент гарантированно равен нулю)

Вы можете найти спецификацию здесь (и во многих других местах, но на этом сайте также есть некоторые полезные дополнительные документы и т. Д.)
http://refspecs.linuxbase.org/

Исходный код LLVM и соответствующие документы также достаточно читабельны (IMO):
http://llvm.org/docs/doxygen/html/Support_2ELF_8h_source.html

Информация о том, как указать ссылки и порядок, расположение разделов:
http://www.math.utah.edu/docs/info/ld_3.html

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]