Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОС рулез.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
630.27 Кб
Скачать

Лекция № 15

Таблица адресов функций представляет собой массив двоичных слов, содержащих RVA одной из экспортируемых функций.

Номер экпорта каждой экспортируемой функции совпадает с её положением в массиве. Положение в массиве определяется так: номер экспорта – BASE. Отсчёт номеров экспорта начинается с числа, содержащегося в поле BASE. Номера экспортов могут иметь пропуски.

Пример.

BASE=10

10…13

10 11 12 13

RVA

0

0

RVA

Когда загрузчик Win32 выполняет вызов экспортируемой функции по номеру работа производится только с этой таблицей, а именно: по номеру определяется индекс в массиве, и по индексу в массиве определяется RVA соответствующей функции. Рассмотрим таблицы имён функции и номеров. Таблица имён функции представляет собой массив указателей на имена функций. Таблица номеров функции всегда содержит то же количество элементов, что и таблица имён. Таблица номеров представляет собой массив индексов для таблицы адресов функций.

Как производится обработка вызовов функций, экспортируемых по имени.

  1. Загрузчик просматривает строки, на которые указывает таблица имён функций, для того чтобы найти имя требуемой функции. Если имя найдено, определяется индекс в таблице имён функций.

  2. По найденному индексу из таблицы номеров функций извлекается индекс в таблице адресов функций. Из таблицы адресов извлекается RVA требуемой функции.

Т аблица адресов функций

Таблица имён функций

MyFunc1 MyFunc3

1 3

Ресурсы ре файла.

Организованы в виде иерархического дерева. Информация о ресурсах содержится в секции .rsrc. Организация ресурсов имеет следующую структуру.

ID: 2 меню

2 элемента

ID: 100

1 элемент

data

ID: 0 корень

3 элемента

ID: 3 диалог

2 элемента

data

ID: 5

3 элемента

пиктограммы

.

.

.

Для каждого типа ресурса содержатся подкаталоги первого уровня, или структура data, которая содержит указатель на конкретное описание ресурса.

Базовые поправки ре файла.

Компоновщик, создавая ехе файл предполагает, где в памяти будет создаваться РЕ файл в соответствии с предполагаемыми адресами ячеек в которых создаются данные, адреса переходов. Если файл загружен куда-либо в другое место в ВАП, то адреса, представляемые компоновщиком будут неверны.

Информация, хранящаяся в секции базовых поправок хранится в .reloc, позволяет загрузчику РЕ файла исправить адреса в загруженном модуле. Если же загрузчику удаётся загрузить файл по предполагаемому базовому адресу, то информация в секции .reloc игнорируется. Базовые поправки представляют собой перечень тех мест в программе, в котором нужно добавить требуемую величину дельта отображения.

=реальный адрес – базовый адрес.

Таблица базовых Данные Файл, загружать

поправок отображения 600000

смещение 0007

смещение 0024

смещение 0086

404000

406234

403018

604000

606234

603018

+

+

+

Реально в таблице базовых поправок формируются блоки различной длины, каждый блок включает базовые поправки для одной 4 Кб страницы. Каждый блок начинается со стартового RVA для этой страницы. Смещение каждой поправки добавляется к этой величине.

RVA

относительный

RVA

?Зачем это надо? Для экономии места.