Составители:
Рубрика:
Рис. 2.3. PE-файл на диске и в оперативной памяти
Благодаря этой особенности загрузчик операционной системы дол-
жен просто отобразить отдельные части PE-файла в адресное пространст-
во процесса, подправить абсолютные адреса в исполняемом коде в соот-
ветствии с таблицей релокаций, создать таблицу адресов импорта и затем
передать управление на точку входа (в случае exe-файла).
На рис. 2.3 изображена схема PE-файла. Слева показана структура
файла на диске, а справа – его образ в памяти. Мы видим, что PE-файл на-
чинается с заголовков, за которыми располагаются несколько секций.
В секциях размещаются код и данные исполняемого файла, а также слу-
жебная информация, необходимая загрузчику (например, секция «.reloc»
на схеме содержит таблицу релокаций). Секции в оперативной памяти
должны быть выровнены по границам страниц, поэтому загрузчик отобра-
жает каждую секцию, начиная с новой страницы адресного пространства
процесса. Это приводит к тому, что в памяти секции, как правило, распо-
лагаются менее компактно, чем в файле (и это отражено на схеме).
Так как расположение элементов PE-файла в памяти и на диске отли-
чаются, для их локализации приходится вводить два понятия: относитель-
Структура программных компонентов
37
и ее надо сначала загрузить в память. Тогда пусть pnum будет но-
мером физической страницы, в которую мы загружаем нашу
виртуальную страницу;
3. Виртуальная страница уже находится в памяти, и ей соответст-
вует некоторая физическая страница. В этом случае pnum – но-
мер этой физической страницы.
После чего адрес px вычисляется следующим образом:
px := pnum*4096 + delta;
Такая организация памяти процесса обладает следующими свойства-
ми:
• Процессы изолированы друг от друга. Один процесс не может
обратиться к памяти другого процесса.
• Передача виртуальных адресов между процессами совершенно
бессмысленна. Один и тот же виртуальный адрес в адресных
пространствах разных процессов соответствует разным физиче-
ским адресам.
• Процессы используют преимущества плоской адресации памя-
ти. Виртуальный адрес представляет собой 32-разрядное целое
значение, что делает возможной легкую реализацию адресной
арифметики.
2.1.1.2. Отображаемые в память файлы
Отображаемые в память файлы (memory-mapped files) – это мощная
возможность операционной системы. Она позволяет приложениям осу-
ществлять доступ к файлам на диске тем же самым способом, каким осу-
ществляется доступ к динамической памяти, то есть через указатели.
Смысл отображения файла в память заключается в том, что содержимое
файла (или часть содержимого) отображается в некоторый диапазон вир-
туального адресного пространства процесса, после чего обращение по ка-
кому-либо адресу из этого диапазона означает обращение к файлу на дис-
ке. Естественно, не каждое обращение к отображенному в память файлу
вызывает операцию чтения/записи. Менеджер виртуальной памяти кэши-
рует обращения к диску и тем самым обеспечивает высокую эффектив-
ность работы с отображенными файлами.
2.1.2. Обзор структуры PE-файла
Исполняемые файлы в формате PE, кроме всего прочего, обладают
одной приятной особенностью – PE-файл, загруженный в оперативную
память для исполнения, почти ничем не отличается от своего представле-
ния на диске. PE-файл сравнивается со сборным домом: стоит привезти
его на место, свинтить отдельные детали, подключить электричество и во-
допровод, и все – можно жить.
36
CIL и системное программирование в Microsoft .NET
PE-файл
Неотображаемые в память
данные
Секция .reloc
Секция N
...
Секция 2
Секция 1
Таблица секций
Доп. заголовок PE-файла
Заголовок PE-файла
Заголовок MS-DOS
Смещение в файле
Образ в памяти
Секция N
Секция 2
Секция 1
Таблица секций
Доп. заголовок PE-файла
Заголовок PE-файла
Заголовок MS-DOS
RVA
...
36 CIL и системное программирование в Microsoft .NET Структура программных компонентов 37 и ее надо сначала загрузить в память. Тогда пусть pnum будет но- Образ в памяти мером физической страницы, в которую мы загружаем нашу виртуальную страницу; Секция N 3. Виртуальная страница уже находится в памяти, и ей соответст- PE-файл вует некоторая физическая страница. В этом случае pnum – но- мер этой физической страницы. ... Неотображаемые в память После чего адрес px вычисляется следующим образом: данные px := pnum*4096 + delta; Такая организация памяти процесса обладает следующими свойства- Секция .reloc ми: Секция 2 • Процессы изолированы друг от друга. Один процесс не может Секция N обратиться к памяти другого процесса. ... • Передача виртуальных адресов между процессами совершенно бессмысленна. Один и тот же виртуальный адрес в адресных Секция 2 Секция 1 пространствах разных процессов соответствует разным физиче- Секция 1 ским адресам. • Процессы используют преимущества плоской адресации памя- Таблица секций Таблица секций ти. Виртуальный адрес представляет собой 32-разрядное целое Доп. заголовок PE-файла Доп. заголовок PE-файла RVA значение, что делает возможной легкую реализацию адресной Заголовок PE-файла Заголовок PE-файла арифметики. Заголовок MS-DOS Заголовок MS-DOS Смещение в файле 2.1.1.2. Отображаемые в память файлы Отображаемые в память файлы (memory-mapped files) – это мощная возможность операционной системы. Она позволяет приложениям осу- Рис. 2.3. PE-файл на диске и в оперативной памяти ществлять доступ к файлам на диске тем же самым способом, каким осу- ществляется доступ к динамической памяти, то есть через указатели. Благодаря этой особенности загрузчик операционной системы дол- Смысл отображения файла в память заключается в том, что содержимое жен просто отобразить отдельные части PE-файла в адресное пространст- файла (или часть содержимого) отображается в некоторый диапазон вир- во процесса, подправить абсолютные адреса в исполняемом коде в соот- туального адресного пространства процесса, после чего обращение по ка- ветствии с таблицей релокаций, создать таблицу адресов импорта и затем кому-либо адресу из этого диапазона означает обращение к файлу на дис- передать управление на точку входа (в случае exe-файла). ке. Естественно, не каждое обращение к отображенному в память файлу На рис. 2.3 изображена схема PE-файла. Слева показана структура вызывает операцию чтения/записи. Менеджер виртуальной памяти кэши- файла на диске, а справа – его образ в памяти. Мы видим, что PE-файл на- рует обращения к диску и тем самым обеспечивает высокую эффектив- чинается с заголовков, за которыми располагаются несколько секций. ность работы с отображенными файлами. В секциях размещаются код и данные исполняемого файла, а также слу- жебная информация, необходимая загрузчику (например, секция «.reloc» 2.1.2. Обзор структуры PE-файла на схеме содержит таблицу релокаций). Секции в оперативной памяти Исполняемые файлы в формате PE, кроме всего прочего, обладают должны быть выровнены по границам страниц, поэтому загрузчик отобра- одной приятной особенностью – PE-файл, загруженный в оперативную жает каждую секцию, начиная с новой страницы адресного пространства память для исполнения, почти ничем не отличается от своего представле- процесса. Это приводит к тому, что в памяти секции, как правило, распо- ния на диске. PE-файл сравнивается со сборным домом: стоит привезти лагаются менее компактно, чем в файле (и это отражено на схеме). его на место, свинтить отдельные детали, подключить электричество и во- Так как расположение элементов PE-файла в памяти и на диске отли- допровод, и все – можно жить. чаются, для их локализации приходится вводить два понятия: относитель-
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »