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
);
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,则函数将查找新的基址并将此参数设置为新的基址。 如果 fGoingDown 为 FALSE,则函数会查找新的基址,但不将此参数设置为新的基址。
[in] TimeStamp
图像文件标头的新时间戳。 根据系统时钟,该值必须以自 1970 年 1 月 1 日世界协调时间) 00:00:00 午夜 (经过的秒数表示。
如果此参数为 0,则当前文件头日期戳将递增 1 秒。
返回值
如果函数成功,则返回值为 TRUE。
如果函数失败,则返回值为 FALSE。 若要检索扩展的错误信息,请调用 GetLastError。
注解
ReBaseImage64 函数更改指定映像的所需加载地址。 此操作涉及读取整个映像并更新所有修复、调试信息和校验和。 可以调整映像的基度,以减少其 DLL 所需的加载时间。 如果应用程序可以依赖于在所需加载地址处加载的 DLL,则系统加载程序不必重定位映像。 只需将映像加载到应用程序的虚拟地址空间中,并调用 DllMain 函数(如果存在)。
所有 ImageHlp 函数(例如此函数)都是单线程的。 因此,从多个线程调用此函数可能会导致意外行为或内存损坏。 若要避免这种情况,必须将多个线程中的所有并发调用同步到此函数。
不能对与 /DYNAMICBASE 链接或驻留在受保护目录(如 System32 文件夹)中的 DLL 重新设置基。
作为使用此函数的替代方法,请参阅 /BASE 链接器选项。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | imagehlp.h |
Library | Imagehlp.lib |
DLL | Imagehlp.dll |