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로 설정된 경우 함수는 새 기본 주소를 찾아 이 매개 변수를 새 기본 주소로 설정합니다. fGoingDown이 FALSE이면 함수는 새 기본 주소를 찾지만 이 매개 변수를 새 기본 주소로 설정하지는 않습니다.
[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 |