WdbgExts 확장 콜백 사용
WdbgExts 확장 DLL을 작성할 때 특정 함수를 내보낼 수 있습니다.
WinDbgExtensionDllInit라는 함수를 내보내야 합니다. 디버거가 확장 DLL을 로드하면 먼저 WinDbgExtensionDllInit 를 호출하고 세 개의 인수를 전달합니다.
- 디버거에서 구현되고 Wdbgexts.h에 선언된 함수에 대한 포인터를 포함하는 WINDBG_EXTENSION_APIS64 구조체에 대한 포인터입니다. 전체 구조를 DLL에서 만든 전역 변수에 복사해야 합니다.
- 주 버전 번호입니다. 주 버전 번호를 DLL에서 만든 전역 변수에 복사해야 합니다.
- 부 버전 번호입니다. 부 버전 번호를 DLL에서 만든 전역 변수에 복사해야 합니다.
예를 들어 다음 예제와 같이 ExtensionApis, SavedMajorVersion 및 SavedMinorVersion이라는 전역 변수를 만들 수 있습니다.
WINDBG_EXTENSION_APIS64 ExtensionApis; USHORT SavedMajorVersion; USHORT SavedMinorVersion; VOID WinDbgExtensionDllInit(PWINDBG_EXTENSION_APIS64 lpExtensionApis, USHORT MajorVersion, USHORT MinorVersion) { ExtensionApis = *lpExtensionApis; SavedMajorVersion = MajorVersion; SavedMinorVersion = MinorVersion; ... }
ExtensionApiVersion이라는 함수를 내보내야 합니다. 디버거는 이 함수를 호출하고 확장 DLL의 버전 번호를 포함하는 EXT_API_VERSION 구조체에 대한 포인터를 다시 예상합니다. 디버거는 확장 버전 번호를 표시하는 .chain 및 version 과 같은 명령을 실행할 때 이 버전 번호를 사용합니다.
필요에 따라 CheckVersion이라는 함수를 내보낼 수 있습니다. 디버거는 확장 명령을 사용할 때마다 이 루틴을 호출합니다. DLL이 디버거와 약간 다른 버전이지만 실행되지 않도록 충분히 다르지 않은 경우 이를 사용하여 버전 불일치 경고를 출력할 수 있습니다.