Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 25 стр.

UptoLike

Рис. 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-файла в памяти и на диске отли-
допровод, и все – можно жить.                                                     чаются, для их локализации приходится вводить два понятия: относитель-