다음을 통해 공유


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

제한이 없는 경우 이미지가 최대 크기(바이트) 또는 0으로 증가할 수 있습니다.

[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
라이브러리 Imagehlp.lib
DLL Imagehlp.dll

참고 항목

DllMain

ImageHlp 함수