Функция ReBaseImage64 (imagehlp.h)
Изменяет адрес загрузки для указанного образа, что сокращает время загрузки библиотеки DLL.
Кроме того, можно использовать средство Перебаза. Это средство доступно в Visual Studio и Windows SDK.
Синтаксис
BOOL IMAGEAPI ReBaseImage64(
[in] PCSTR CurrentImageName,
[in] PCSTR SymbolPath,
[in] BOOL fReBase,
[in] BOOL fRebaseSysfileOk,
[in] BOOL fGoingDown,
[in] ULONG CheckImageSize,
[out] ULONG *OldImageSize,
[out] ULONG64 *OldImageBase,
[out] ULONG *NewImageSize,
[in, out] ULONG64 *NewImageBase,
[in] ULONG TimeStamp
);
Параметры
[in] CurrentImageName
Имя файла, который необходимо перебазировать. Необходимо указать полный путь к файлу, если модуль не находится в текущем рабочем каталоге вызывающего процесса.
[in] SymbolPath
Путь, используемый для поиска соответствующего файла символов. Укажите этот путь для исполняемых изображений с символьными сведениями, так как при изменении адресов изображений также может потребоваться изменить соответствующий файл базы данных символов (PDB). Обратите внимание, что даже если путь к символам недопустим, функция будет успешно выполнена, если она сможет перебазировать изображение.
[in] fReBase
Если это значение равно TRUE, образ будет перебазирован. В противном случае образ не будет перебазирован.
[in] fRebaseSysfileOk
Если это значение равно TRUE, образ системы перебазируется. В противном случае образ системы не будет перебазирован.
[in] fGoingDown
Если это значение равно TRUE, образ можно перебазировать под заданной базой; В противном случае он не может.
[in] CheckImageSize
Максимальный размер, до который может увеличиться изображение( в байтах) или нуль при отсутствии ограничений.
[out] OldImageSize
Указатель на переменную, которая получает исходный размер изображения в байтах.
[out] OldImageBase
Указатель на переменную, которая получает исходную базу образа.
[out] NewImageSize
Указатель на переменную, которая получает новый размер изображения после операции изменения базы данных в байтах.
[in, out] NewImageBase
Базовый адрес, используемый для перебазирования образа. Если адрес недоступен, а параметру fGoingDown присвоено значение TRUE, функция находит новый базовый адрес и задает для этого параметра новый базовый адрес. Если fGoingDown имеет значение FALSE, функция находит новый базовый адрес, но не задает для этого параметра новый базовый адрес.
[in] TimeStamp
Новая метка даты и времени для заголовка файла изображения. Значение должно быть представлено в количестве секунд, прошедшем с полуночи (00:00:00), 1 января 1970 года, универсального скоординированного времени, в соответствии с системными часами.
Если этот параметр имеет значение 0, метка даты даты заголовка текущего файла увеличивается на 1 секунду.
Возвращаемое значение
Если функция выполняется успешно, возвращается значение TRUE.
Если функция завершается сбоем, возвращается значение FALSE. Чтобы получить расширенные сведения об ошибке, вызовите Метод GetLastError.
Комментарии
Функция ReBaseImage64 изменяет требуемый адрес загрузки для указанного образа. Эта операция включает в себя чтение всего образа и обновление всех исправлений, сведений об отладке и контрольной суммы. Вы можете перебазировать образ, чтобы сократить время загрузки библиотек DLL. Если приложение может полагаться на библиотеку DLL, загружаемую по нужному адресу загрузки, то системный загрузчик не должен перемещать образ. Образ просто загружается в виртуальное адресное пространство приложения и вызывается функция DllMain , если она присутствует.
Все функции ImageHlp, такие как эта, являются однопоточными. Поэтому вызовы из нескольких потоков к этой функции, скорее всего, приведут к непредвиденному поведению или повреждению памяти. Чтобы избежать этого, необходимо синхронизировать все параллельные вызовы из нескольких потоков в эту функцию.
Нельзя перебазировать библиотеки DLL, которые связаны с /DYNAMICBASE или находятся в защищенных каталогах, таких как папка System32.
В качестве альтернативы использованию этой функции см. параметр компоновщика /BASE .
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | imagehlp.h |
Библиотека | Imagehlp.lib |
DLL | Imagehlp.dll |