reBaseImage 函数 (imagehlp.h)

更改指定映像的加载地址,从而减少 DLL 所需的加载时间。

或者,可以使用“重新加基”工具。 此工具在 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
);

parameters

[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,则函数将查找新的基址并将此参数设置为新的基址。 如果 fGoingDownFALSE,则函数会查找新的基址,但不将此参数设置为新的基址。

[in] TimeStamp

图像文件标头的新时间戳。 根据系统时钟,该值必须以自 1970 年 1 月 1 日世界协调时间) 00:00:00 午夜 (经过的秒数表示。

如果此参数为 0,则当前文件头日期戳将递增 1 秒。

返回值

如果函数成功,则返回值为 TRUE

如果函数失败,则返回值为 FALSE。 若要检索扩展的错误信息,请调用 GetLastError

注解

ReBaseImage 函数更改指定图像的所需加载地址。 此操作涉及读取整个映像并更新所有修复、调试信息和校验和。 可以调整映像的基度,以减少其 DLL 所需的加载时间。 如果应用程序可以依赖于在所需加载地址处加载的 DLL,则系统加载程序不必重定位映像。 只需将映像加载到应用程序的虚拟地址空间中,并调用 DllMain 函数(如果存在)。

所有 ImageHlp 函数(例如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将多个线程中的所有并发调用同步到此函数。

不能对与 /DYNAMICBASE 链接或驻留在受保护目录(如 System32 文件夹)中的 DLL 重新设置基。

作为使用此函数的替代方法,请参阅 /BASE 链接器选项。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 imagehlp.h
Library Imagehlp.lib
DLL Imagehlp.dll

另请参阅

DllMain

ImageHlp 函数