WinDbg-DLL 개발 시작 확대
잔말 말고 다음은 가장 간단한 데모입니다. help 명령만 포함됩니다.
이루어지다
주로 두 가지 점이 있습니다.
1. DebugExtensionInitialize 함수를 실현하는데 이것은 WinDbg의 DLL 확장을 실현하는 데 반드시 실현해야 하는 것이다.WinDbg가 이 DLL을 로드하면 호출됩니다.
2. 함수 내보내기
간단한 DLL 프로젝트를 만듭니다.
소스는 다음과 같습니다.
.h #include
#define KDEXT_64BIT // 64bit, wdbgexts.h
#include
#include
HRESULT
CALLBACK
DebugExtensionInitialize(
OUT PULONG Version,
OUT PULONG Flags
);
HRESULT
CALLBACK
help(PDEBUG_CLIENT4 pDebugClient, PCSTR args);
.cpp // KrDbgExtend.cpp : Defines the exported functions for the DLL application.
//
#include "KrDbgExtend.h"
WINDBG_EXTENSION_APIS ExtensionApis;
HRESULT CALLBACK
DebugExtensionInitialize(PULONG Version, PULONG Flags)
{
IDebugClient *DebugClient;
PDEBUG_CONTROL DebugControl;
HRESULT Hr;
*Version = DEBUG_EXTENSION_VERSION(1, 0);
*Flags = 0;
Hr = S_OK;
if ((Hr = DebugCreate(__uuidof(IDebugClient),
(void **)&DebugClient)) != S_OK)
{
return Hr;
}
if ((Hr = DebugClient->QueryInterface(__uuidof(IDebugControl),
(void **)&DebugControl)) == S_OK)
{
//
// Get the windbg-style extension APIS
//
ExtensionApis.nSize = sizeof(ExtensionApis);
Hr = DebugControl->GetWindbgExtensionApis64(&ExtensionApis);
DebugControl->Release();
}
DebugClient->Release();
return Hr;
}
HRESULT CALLBACK help(PDEBUG_CLIENT4 pDebugClient, PCSTR args)
{
UNREFERENCED_PARAMETER(args);
dprintf("Help for KrDbgExtend.dll
"
" Hey, No help!!!
"
);
return S_OK;
}
dprintf 인쇄는 Extension Apis를 통해 이루어졌으며, 이 구조체 DLL 개발자는 초기화되었고, 섹션 코드는 Debug Extension Initialize에서 초기화되었다.
마지막으로 함수를 내보내야 합니다. 여기에 사용합니다.def 파일의 내보내기 방법:
; KrDbfExtend.def
EXPORTS
DebugExtensionInitialize
help
사용
DLL 자릿수는 WinDbg 자릿수와 일치해야 합니다.
로드kd> .load KrDbgExtend.dll
사용kd> !help
Help for KrDbgExtend.dll
Hey, No help!!!
주의해야 할 것은 다른 모듈에서도 help 명령을 내보냈다면, 이것은 허용되는 것입니다. 이것은 DLL이 마지막으로 가져온 것을 보십시오.특정 모듈의 help 명령을 사용하려면 다음을 수행합니다.kd> ![module_name].help
마운트 해제kd> !KrDbgExtend.unload
or
kd> .unload KrDbgExtend
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[WinIoT/라즈파이] VS2019로 만든 UWP의 sln을 라즈파이 3+WinIoTCore로 원격 디버깅을 할 수 없을 때의 대처
2021년 1월 시점에서 라즈파이 3에 WindowsIoTCore를 넣고 VisualStudio2019에서 UWP 앱을 새로 만들고 디버깅하려고 했는데 잘 디버깅할 수 없었다.
구체적으로는, 「리모트 디버거에 접속할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
#include
#define KDEXT_64BIT // 64bit, wdbgexts.h
#include
#include
HRESULT
CALLBACK
DebugExtensionInitialize(
OUT PULONG Version,
OUT PULONG Flags
);
HRESULT
CALLBACK
help(PDEBUG_CLIENT4 pDebugClient, PCSTR args);
// KrDbgExtend.cpp : Defines the exported functions for the DLL application.
//
#include "KrDbgExtend.h"
WINDBG_EXTENSION_APIS ExtensionApis;
HRESULT CALLBACK
DebugExtensionInitialize(PULONG Version, PULONG Flags)
{
IDebugClient *DebugClient;
PDEBUG_CONTROL DebugControl;
HRESULT Hr;
*Version = DEBUG_EXTENSION_VERSION(1, 0);
*Flags = 0;
Hr = S_OK;
if ((Hr = DebugCreate(__uuidof(IDebugClient),
(void **)&DebugClient)) != S_OK)
{
return Hr;
}
if ((Hr = DebugClient->QueryInterface(__uuidof(IDebugControl),
(void **)&DebugControl)) == S_OK)
{
//
// Get the windbg-style extension APIS
//
ExtensionApis.nSize = sizeof(ExtensionApis);
Hr = DebugControl->GetWindbgExtensionApis64(&ExtensionApis);
DebugControl->Release();
}
DebugClient->Release();
return Hr;
}
HRESULT CALLBACK help(PDEBUG_CLIENT4 pDebugClient, PCSTR args)
{
UNREFERENCED_PARAMETER(args);
dprintf("Help for KrDbgExtend.dll
"
" Hey, No help!!!
"
);
return S_OK;
}
; KrDbfExtend.def
EXPORTS
DebugExtensionInitialize
help
DLL 자릿수는 WinDbg 자릿수와 일치해야 합니다.
로드
kd> .load KrDbgExtend.dll
사용
kd> !help
Help for KrDbgExtend.dll
Hey, No help!!!
주의해야 할 것은 다른 모듈에서도 help 명령을 내보냈다면, 이것은 허용되는 것입니다. 이것은 DLL이 마지막으로 가져온 것을 보십시오.특정 모듈의 help 명령을 사용하려면 다음을 수행합니다.
kd> ![module_name].help
마운트 해제
kd> !KrDbgExtend.unload
or
kd> .unload KrDbgExtend
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[WinIoT/라즈파이] VS2019로 만든 UWP의 sln을 라즈파이 3+WinIoTCore로 원격 디버깅을 할 수 없을 때의 대처2021년 1월 시점에서 라즈파이 3에 WindowsIoTCore를 넣고 VisualStudio2019에서 UWP 앱을 새로 만들고 디버깅하려고 했는데 잘 디버깅할 수 없었다. 구체적으로는, 「리모트 디버거에 접속할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.