1. Правильно, файл ELF определяет абсолютные или относительные местоположения в виртуальном адресном пространстве процесса, в который операционная система должна скопировать содержимое файла ELF.(BSS - это просто местоположение и размер, поскольку предполагается, что это все нули, поэтому фактически нет нужды иметь нули в файле ELF).Обратите внимание, что местоположения могут быть абсолютными (например, виртуальный адрес 0x100000 или относительные позиции, например, 4096 байт после конца текста).
2. Определение виртуальной памяти (хранится в таблицах страници сопоставляет виртуальные адреса с физическими адресами) не ассоциируется с скомпилированной программой, а с «процессом» (или «задачей» или как ее называет ваша ОС), представляющим работающий экземпляр этой программы.Например, один файл ELF можно загрузить в два разных процесса по разным виртуальным адресам (если файл ELF можно перемещать).
3. Используемый вами язык программирования определяеткакое неинициализированное состояние переходит в bss, а какое явно инициализируется.Обратите внимание, что bss не содержит "ссылки" на эти переменные, является хранилищем этих переменных.
4. Переменные стекассылаются неявно из сгенерированного кода.В файле ELF нет ничего явного о них (или даже о стеке).
5. Как и ссылки на стек, ссылки на кучи неявно присутствуют в сгенерированном коде в файле ELF.(Все они хранятся в памяти, созданной путем изменения виртуального адресного пространства посредством вызова на sbrk
или его эквивалент.)
Файл ELF объясняет ОС, как настроить виртуальное адресное пространство для экземплярапрограммы.Различные разделы описывают различные потребности.Например, «.rodata» говорит, что я хотел бы хранить данные только для чтения (в отличие от исполняемого кода).Раздел «.text» означает исполняемый код.«Bss» - это область, используемая для хранения состояния, которое должно быть обнулено ОС.Виртуальное адресное пространство означает, что программа может (опционально) полагаться на то, что ожидает от запуска.(Например, если он запрашивает, чтобы .bss был по адресу 0x4000, то либо ОС откажется запускать его, либо он будет там.)
Обратите внимание, что эти виртуальные адреса сопоставлены с физическими адресами.таблицами страниц, управляемыми ОС.Экземпляр файла ELF не должен знать какие-либо подробности, связанные с использованием физических страниц.