diff --git a/samples/km/__init__.py b/samples/km/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/samples/km/drvobj.py b/samples/km/drvobj.py index 6defd16..2a6a606 100644 --- a/samples/km/drvobj.py +++ b/samples/km/drvobj.py @@ -67,13 +67,15 @@ def printDrvMajorTable( drvName ): for i in range( len(drvObj.MajorFunction) ): dprintln( "MajorFunction[%d] = %s" % ( i, findSymbol( drvObj.MajorFunction[i] ) ) ) +def run(): + loadSymbols(); + printDrvMajorTable( "afd" ) if __name__ == "__main__": - if not isWindbgExt(): - loadDump( sys.argv[1] ) + if not isWindbgExt(): + loadDump( sys.argv[1] ) - loadSymbols(); + run() - printDrvMajorTable( "afd" ) \ No newline at end of file diff --git a/samples/km/proclist.py b/samples/km/proclist.py index 70f2f0c..70c1d42 100644 --- a/samples/km/proclist.py +++ b/samples/km/proclist.py @@ -2,7 +2,6 @@ import sys from pykd import * - def processInfo(): nt = module( "nt" ) @@ -12,6 +11,8 @@ def processInfo(): for process in processList: print "".join( [chr(i) for i in process.ImageFileName if i != 0] ) +def run(): + processInfo() def main(): diff --git a/samples/km/ssdt.py b/samples/km/ssdt.py index 45adbbb..b4c9d56 100644 --- a/samples/km/ssdt.py +++ b/samples/km/ssdt.py @@ -43,11 +43,12 @@ def checkSSDT(): for i in range( 0, serviceCount ): dprintln( "[%u] " % i + findSymbol( serviceTable[i] ) ) +def run(): + checkSSDT() if __name__ == "__main__": - while True: if not isWindbgExt(): @@ -58,8 +59,7 @@ if __name__ == "__main__": if not isKernelDebugging(): dprintln( "not a kernel debugging" ) break - - checkSSDT() - break + + run() - \ No newline at end of file + break diff --git a/samples/samples.py b/samples/samples.py index 0714417..9a87d6c 100644 --- a/samples/samples.py +++ b/samples/samples.py @@ -1,11 +1,71 @@ + +import sys +import os.path + from pykd import dprintln +from pykd import dprint + +def printAllSamples(): + dprintln( "Kernel mode", True ) + dprintln( "Get process list Run Source", True) + dprintln( "Get kernel service list Run Source", True) + dprintln( "Get driver object Run Source", True) + dprintln( "" ) + +def runSample( sampleName ): + + try: + packageName, moduleName = sampleName.split(".") + + module = __import__( name = sampleName, fromlist = moduleName ) + + module.__dict__[ "run" ]() + + except ImportError: + dprintln("import error") + pass + + dprintln( "" ) + dprintln( "Sample list", True ) + dprintln( "" ) + +def printSample( sampleName ): + + try: + packageName, moduleName = sampleName.split(".") + + module = __import__( name = sampleName, fromlist = moduleName ) + + fileName = os.path.dirname( module.__dict__["__file__"] ) + fileName = os.path.join( fileName, moduleName + ".py" ) + + with open( fileName ) as f: + for line in f: + dprint( line ) + + except ImportError: + dprintln("import error") + pass + + dprintln( "" ) + dprintln( "Sample list", True ) + dprintln( "" ) + + +def main(): + if len(sys.argv) <= 2: + return printAllSamples() + + if sys.argv[1] == "run": + runSample( sys.argv[2] ) + + if sys.argv[1] == "source": + printSample( sys.argv[2] ) + + +if __name__ == "__main__": + main() + -dprintln( "Kernel mode", True ) -dprintln( "Get process list", True ) -dprintln( "Get kernel service list (SDT)", True ) -dprintln( "Get driver object", True ) -dprintln("") -dprintln( "User mode", True ) -dprintln("")