Функция ReBaseImage (imagehlp.h)
Изменяет адрес загрузки для указанного образа, что сокращает время загрузки библиотеки DLL.
Кроме того, можно использовать средство Rebase. Это средство доступно в Visual Studio и windows SDK.
Обратите внимание, что эта функция реализована как вызов функции ReBaseImage64 .
Синтаксис
BOOL IMAGEAPI ReBaseImage(
[in] PCSTR CurrentImageName,
[in] PCSTR SymbolPath,
[in] BOOL fReBase,
[in] BOOL fRebaseSysfileOk,
[in] BOOL fGoingDown,
[in] ULONG CheckImageSize,
[out] ULONG *OldImageSize,
[out] ULONG_PTR *OldImageBase,
[out] ULONG *NewImageSize,
[in, out] ULONG_PTR *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.
Комментарии
Функция ReBaseImage изменяет требуемый адрес загрузки для указанного изображения. Эта операция включает в себя чтение всего образа и обновление всех исправлений, сведений об отладке и контрольной суммы. Вы можете перебазировать образ, чтобы сократить время загрузки библиотек DLL. Если приложение может полагаться на библиотеку DLL, загружаемую по нужному адресу загрузки, системный загрузчик не должен перемещать образ. Образ просто загружается в виртуальное адресное пространство приложения и вызывается функция DllMain , если она присутствует.
Все функции ImageHlp, такие как эта, являются однопоточными. Таким образом, вызовы из нескольких потоков к этой функции, скорее всего, приведут к непредвиденному поведению или повреждению памяти. Чтобы избежать этого, необходимо синхронизировать все параллельные вызовы из нескольких потоков в эту функцию.
Нельзя перебазировать библиотеки DLL, которые связаны с /DYNAMICBASE или находятся в защищенных каталогах, например в папке System32.
В качестве альтернативы использованию этой функции см. параметр компоновщика /BASE .
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | imagehlp.h |
Библиотека | Imagehlp.lib |
DLL | Imagehlp.dll |