Отладка приложений



         

Адреса загрузки DLL - часть 3


Следующие три команды показывают, как нужно запускать REBASE.EXE с этими DLL:

REBASE /b 0x60000000 APPLE.DLL

REBASE /b 0x61000000 DUMPLING.DLL

REBASE /b 0x62000000 GINGER.DLL GOOSEBERRIES.DLL

Если несколько DLL-файлов передаются в REBASE.EXE в командной строке, как здесь показано для файлов GINGER.DLL и GOOSEBERRIES.DLL, то REBASE.EXE перебазирует их так, чтобы они были загружены друг за другом, начиная с указанного стартового адреса.

Другой метод перебазирования DLL состоит в спецификации адреса загрузки при компоновке DLL. В IDE Visual Basic установите адрес в поле DLL Base Address на вкладке Compile диалогового окна Project Properties. В Visual C++ укажите адрес в редактируемое поле Base Address, перейдя на вкладку Link диалогового окна Project Settings и выбрав там элемент Output в комбинированном списке Category. Visual C++ транслирует адрес, который вы вводите в поле Base Address в ключ /BASE компоновщика LINK.EXE.

С помощью утилиты REBASE.EXE можно автоматически обрабатывать одновременную установку множественных адресов загрузки DLL. Однако при установке адреса загрузки во время компоновки следует быть немного осторожнее. Если адреса загрузки нескольких DLL-файлов установлены слишком близко друг к другу, то в окне Ouput появляется сообщение перераспределения загрузчика. Фокус в том, чтобы установить загрузочные адреса достаточно далеко друг от друга (чтобы не беспокоиться о них после того, как вы их установили).

Для тех же DLL-файлов, что и в примере с REBASE.EXE, загрузочные адреса устанавливаются так:

APPLE.DLL           0x60000000

DUMPLING.DLL.       0x61000000

GINGER.DLL          0x62000000

GOOSEBERRIES.DLL    0x62100000

Два файла — GINGER.DLL и GOOSEBERRIES.DLL - интересны потому, что их имена начинаются с одного и того же знака. Когда это случается, адреса загрузки дифференцируются по третьей старшей цифре.


Содержание  Назад  Вперед