Поделиться через


Функция 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

См. также раздел

DllMain

Функции ImageHlp