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

0

Если я правильно понимаю, создав раздел типа .bss (как .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;
Теги:
storage
elf
segment

1 ответ

2
Лучший ответ

Да, ОС заполнит раздел.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

  • 0
    А остальные 2 квестона, я прав?
  • 0
    Я так думаю, но я не совсем уверен в том, что вы пытаетесь сделать - хотя я и спрашивал: «Гарантируется ли память, которая выделяется равной нулю?» - я не слишком внимательно изучал, как создаются регионы, но выглядит разумно.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню