2016-06-15 9 views
0

Все современные операционные системы * nix используют концепцию виртуальной памяти (с пейджингом). И насколько я знаю, эта концепция виртуальной памяти используется для установки уровня абстракции между программистом и реальной физической памятью: программисту не нужно ограничиваться размером плунжера, и он может видеть программу как большую непрерывное пространство данных, команд, кучи и стека (манипулировать указателями в соответствии с этой концепцией). Когда мы компилируем & ссылку на исходный код, мы получаем исполняемый файл, хранящийся на жестком диске, известный как ELF, этот файл содержит все данные и инструкции программы помимо некоторой дополнительной информации, такой как размер стека и кучи (созданный только во время выполнения).Расположение бинарных файлов ELF в виртуальной памяти

Теперь мои вопросы:

1. How does this binary file (elf) is mapped to virtual memory ? 
    2. Does every process has its own virtual memory (a page file !!!) ? 
    3. What is the program's layout after being mapped to virtual memory ? 
    4. What is exactly the preferred base address and how does it look in virtual memory ? 
    5. What is the difference between a RVA and an Offset ? 

Вам не придется ответов на все вопросы или дать подробные ответы вместо этого вы можете предоставить мне хорошие полные показания о предмете, спасибо.

+0

Возможно, вы захотите прочитать это резюме, о котором я писал об этом, http: //www.gabriel.urdhr.fr/2015/01/22/elf-linking/ – ysdx

+0

Вы можете найти информацию о сопоставлении файла ELF в памяти в http://stackoverflow.com/questions/33756119/relationship-between-vma-and-elf-segments – ysdx

+0

@ysdx thnx, это было очень полезно для меня, и я познакомился с новыми идеями. – afr0ck

ответ

0
  1. Как это двоичный файл (эльф) отображается в виртуальную память ??

Исполняемый файл содержит инструкции к загрузчику о том, как раскладывать адресное пространство. В некоторых системах части исполняемого файла могут быть отображены в память и служить файлом страницы.

  1. Имеет ли каждый процесс свою собственную виртуальную память (файл страницы !!!)?

Каждый процесс имеет свое логическое адресное пространство. Некоторые области в этом адресном пространстве могут использоваться совместно с другими процессами.

  1. Что такое макет программы после сопоставления с виртуальной памятью?

зависит от системы и того, что исполняемый файл сказал загрузчику.

  1. Какой именно предпочтительный базовый адрес и как он выглядит в виртуальной памяти?

Это просто желаемое начальное местоположение для загрузки чего-либо в память. Большинство компиляторов генерируют перемещаемый код, который не привязан к какому-либо конкретному логическому адресу.

  1. В чем разница между RVA и смещением?

RVA - это притворный униксизм для смещения. Что непонятно, в вашем вопросе о том, какой тип смещения вы говорите. Есть байтовые смещения со страниц. RVA обычно является смещением от места загрузки, которое может охватывать страницы.

+0

Виртуальная память по-прежнему является препятствием для меня, я немного разбираюсь в макете и логико-физическом переводе, но я все еще что-то шучу о виртуальной памяти, я хочу знать, как она реализована, как чувствовать и манипулировать этим виртуальным вещь ? – afr0ck

+1

Для этого вам действительно нужно понимать перевод логической памяти. По большей части виртуальная память является отдельной проблемой. – user3344003