mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-18 01:53:22 +08:00
[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:
parent
d946db623c
commit
5396e876e3
@ -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 ¶ms )
|
||||
{
|
||||
|
@ -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
67
snippets/avl.py
Normal 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 )
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user