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