2014-04-04 5 views
0

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

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; 

ответ

2

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

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

Edit:

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

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

(В другом месте он говорит, что содержание гарантированно будет нулевым)

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

источник LLVM код и связанные с ним документы также достаточно для чтения (ИМО): http://llvm.org/docs/doxygen/html/Support_2ELF_8h_source.html

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

+0

И еще 2 вопроса, я прав? –

+0

Я так думаю, но я не совсем уверен, что вы пытаетесь сделать - я, хотя вы спрашивали: «Является ли память, которая получает выделенное гарантированное значение равным нулю» - я не очень внимательно смотрел, как генерируются регионы , но выглядит разумно. –

+0

Я просто пытаюсь узнать, где начать и закончить область раздела «.bss». –