You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shaswata56
7b07a90fc1
|
4 years ago | |
---|---|---|
.. | ||
dbgexts.cpp | 4 years ago | |
dbgexts.def | 4 years ago | |
dbgexts.h | 4 years ago | |
dbgexts.rc | 4 years ago | |
exts.cpp | 4 years ago | |
makefile | 4 years ago | |
readme.txt | 4 years ago | |
sources | 4 years ago |
readme.txt
README file for sample extension dbgexts.dll
This extsnsion dll shows how to write an enginge-style extension and demostrates use of a few APIs provied to extension dlls
Mandatory routines which must be implemented and exported for engine style extensions:
HRESULT
CALLBACK
DebugExtensionInitialize(PULONG Version, PULONG Flags)
This is called on loading extension dll. Global variables and flags for the extension should be initialized in this routine. One
of the useful things is to initialize WINDBG_WNTENSION_APIS global which has some commonly used APIS for memory reads and I/O.
It should return the extensions version in Version. Flags is reserved parameter for future use and should be set to 0.
These 2 routines are optional but its recomended to implement these routines in extension for better control of the debug session.
CALLBACK
DebugExtensionNotify(ULONG Notify, ULONG64 Argument)
This is used to notify extension dll of change in session states like when the session becomes accessible etc. Look at DEBUG_NOTIFY*
definitions in dbgeng.h for argument values.
CALLBACK
DebugExtensionUninitialize(void)
This is called when dll is unloaded and can ge used for cleanups.
Extension Calls
---------------
An extension has the type:
HRESULT CALLBACK (PDEBUG_CLIENT Client, PCSTR args)
'Client' is the initial pointer to debug engine IDebugClient interface. In this sample, upon entering entension all engine
Intefaces, which would be required in extension, are queried from the DEBUG_CLIENT. INIT_API / ExtQuery are handy definitions for doing so.
Any Interfaces queried should be released before exit. EXIT_API / ExtRelease are provided for this.
Extensions
----------
cmdsample
This demonstrates use of engine APIs like IDebugControl::Execute, Output.
structsample
This shows how to read data from the target, and also shows how to use types to read values correctly so that extension
need not be rewritten when type definitions change for the target.
help
Every extension dll should have one extension called 'help' which shows descriptions for extensions that are present in the dll.