ReBaseImage64 函式 (imagehlp.h)
變更指定映射的載入位址,以減少 DLL 所需的載入時間。
或者,您可以使用 Rebase 工具。 此工具可在 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) 1970 年 1 月 1 日國際標準時間起經過的秒數表示。
如果此參數為 0,則目前的檔案頭時間戳記會遞增 1 秒。
傳回值
如果函式成功,則傳回值為 TRUE。
如果函式失敗,傳回值為 FALSE。 若要擷取擴充的錯誤資訊,請呼叫 GetLastError。
備註
ReBaseImage64函式會變更所指定影像所需的載入位址。 此作業牽涉到讀取整個映射,並更新所有修正、偵錯資訊和總和檢查碼。 您可以重新建立映射基底,以減少其 DLL 所需的載入時間。 如果應用程式可以依賴在所需載入位址載入 DLL,則系統載入器不需要重新放置映射。 映射只會載入應用程式的虛擬位址空間,而且如果有 DllMain 函式,則會呼叫該函式。
所有 ImageHlp 函式,例如此函式都是單一執行緒。 因此,從一個以上的執行緒呼叫此函式可能會導致非預期的行為或記憶體損毀。 若要避免這種情況,您必須將所有並行呼叫從一個以上的執行緒同步至此函式。
您無法將連結至 /DYNAMICBASE 或位於受保護目錄中的 DLL 重新設定基底,例如 System32 資料夾。
作為使用此函式的替代方案,請參閱 /BASE 連結器選項。
需求
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | imagehlp.h |
程式庫 | Imagehlp.lib |
Dll | Imagehlp.dll |