Составители:
Рубрика:
Рис. 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
- …
- следующая ›
- последняя »
