共用方式為


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,則函式會尋找新的基底位址,並將此參數設定為新的基底位址。 如果 fGoingDownFALSE,函式會尋找新的基底位址,但不會將此參數設定為新的基底位址。

[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

另請參閱

DllMain

ImageHlp 函式