[0.3.x] added : removeExt ( Unload a WinDBG extension. Parameter: extension path )

git-svn-id: https://pykd.svn.codeplex.com/svn@87280 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2014-02-13 06:03:15 +00:00 committed by Mikhail I. Izmestev
parent d946db623c
commit 5396e876e3
3 changed files with 80 additions and 4 deletions

View File

@ -298,7 +298,7 @@ std::wstring getExtensionSearchPath()
}
inline
kdlib::EXTENSION_ID loadExtension(const std::wstring &extPath )
kdlib::EXTENSION_ID loadExtension( const std::wstring &extPath )
{
AutoRestorePyState pystate;
return kdlib::loadExtension(extPath);
@ -311,6 +311,13 @@ void removeExtension( kdlib::EXTENSION_ID extId )
kdlib::removeExtension(extId);
}
inline
void removeExtension( const std::wstring &extPath )
{
AutoRestorePyState pystate;
kdlib::removeExtension(extPath);
}
inline
std::wstring callExtension( kdlib::EXTENSION_ID extId, const std::wstring command, const std::wstring &params )
{

View File

@ -90,7 +90,7 @@ BOOST_PYTHON_MODULE( pykd )
kdlib::dbgerr = &sysPykdErr;
kdlib::dbgin = &sysPykdIn;
python::scope().attr("version") = pykdVersion;
python::scope().attr("__version__") = pykdVersion;
python::def( "initialize", &kdlib::initialize,
"Initialize debug engine, only for console mode" );
@ -104,8 +104,10 @@ BOOST_PYTHON_MODULE( pykd )
"Return the extension DLL search path" );
python::def( "loadExt", pykd::loadExtension,
"Load a WinDBG extension. Return handle of the loaded extension" );
python::def( "removeExt", pykd::removeExtension,
"Unload a WinDBG extension. Parameters: handle returned by loadExt" );
python::def( "removeExt", (void(*)(kdlib::EXTENSION_ID))&pykd::removeExtension,
"Unload a WinDBG extension. Parameter: handle returned by loadExt" );
python::def( "removeExt", (void (*)(const std::wstring& ))&pykd::removeExtension,
"Unload a WinDBG extension. Parameter: extension path" );
python::def( "callExt", pykd::callExtension,
"Call a WinDBG extension's routine. Parameters: handle returned by loadExt; string command line" );

67
snippets/avl.py Normal file
View File

@ -0,0 +1,67 @@
#
#
#
import sys
import re
from pykd import isWindbgExt
from pykd import dprintln
from pykd import expr
from pykd import typedVar
from pykd import typeInfo
from pykd import addr64
from pykd import sizeof
def addTableChilds( table, links ):
table.append( links.getAddress() + sizeof( "nt!_RTL_BALANCED_LINKS" ) )
if links.LeftChild != 0:
addTableChilds( table, typedVar("nt!_RTL_BALANCED_LINKS", links.LeftChild) )
if links.RightChild != 0:
addTableChilds( table, typedVar("nt!_RTL_BALANCED_LINKS", links.RightChild) )
def getAVLTable( addr ):
table = []
avl = typedVar( "nt!_RTL_AVL_TABLE", addr )
addTableChilds( table, avl.BalancedRoot )
return table
def printUsage():
dprintln( "!py avl [addr] (type)")
if __name__ == "__main__":
if len( sys.argv ) < 2:
printUsage()
quit(0)
showAll = False
args = sys.argv
if '-a' in args:
args.remove('-a')
showAll = True
items = getAVLTable( addr64( expr( sys.argv[1] ) ) )
if showAll:
if len( sys.argv ) == 2:
dprintln( "\n".join( [ "<link cmd=\"db 0x%x\">db 0x%x</link>" % ( entry, entry ) for entry in items ] ), True )
else:
ti = typeInfo(sys.argv[2])
dprintln( "\n".join( [ "<link cmd=\"dt %s 0x%x\">dt %s</link>\n%s" % ( sys.argv[2], entry, sys.argv[2], typedVar(ti, entry) ) for entry in items ] ), True )
else:
if len( sys.argv ) == 2:
dprintln( "\n".join( [ "<link cmd=\"db 0x%x\">db 0x%x</link>" % ( entry, entry ) for entry in items ] ), True )
else:
dprintln( "\n".join( [ "<link cmd=\"dt %s 0x%x\">dt %s</link>" % ( sys.argv[2], entry, sys.argv[2] ) for entry in items ] ), True )