Merge branch 'm417z/pykd-patch-1' into 0.3.2

This commit is contained in:
ussrhero 2020-03-21 12:39:03 +03:00
commit c36dafa380

View File

@ -164,7 +164,7 @@ void pykd_init()
python::def( "startProcess", pykd::startProcess, startProcess_( boost::python::args( "commandline", "debugOptions"), python::def( "startProcess", pykd::startProcess, startProcess_( boost::python::args( "commandline", "debugOptions"),
"Start process for debugging" ) ); "Start process for debugging" ) );
python::def("attachProcess", pykd::attachProcess, attachProcess_(boost::python::args("pid", "debugOptions"), python::def("attachProcess", pykd::attachProcess, attachProcess_(boost::python::args("pid", "debugOptions"),
"Attach debugger to a exsisting process")); "Attach debugger to a existing process"));
python::def( "detachProcess", pykd::detachProcess, detachProcess_( boost::python::args( "id" ), python::def( "detachProcess", pykd::detachProcess, detachProcess_( boost::python::args( "id" ),
"Stop process debugging") ); "Stop process debugging") );
python::def( "detachAllProcesses", pykd::detachAllProcesses, python::def( "detachAllProcesses", pykd::detachAllProcesses,
@ -191,7 +191,7 @@ void pykd_init()
python::def( "writeDump", pykd::writeDump, python::def( "writeDump", pykd::writeDump,
"Create memory dump file" ); "Create memory dump file" );
python::def( "getLocalProcesses", pykd::getLocalProcesses, python::def( "getLocalProcesses", pykd::getLocalProcesses,
"Return list of runnng processes on the host system" ); "Return list of running processes on the host system" );
python::def("getHostProcessPath", pykd::getHostProcessPath, python::def("getHostProcessPath", pykd::getHostProcessPath,
"Return image path of the process running python interpreter with a pykd"); "Return image path of the process running python interpreter with a pykd");
python::def( "getDebugOptions", pykd::getDebugOptions, python::def( "getDebugOptions", pykd::getDebugOptions,
@ -216,7 +216,7 @@ void pykd_init()
python::def( "trace", pykd::targetStepIn, python::def( "trace", pykd::targetStepIn,
"The target is executing a single instruction" ); "The target is executing a single instruction" );
python::def("stepout", pykd::targetStepOut, python::def("stepout", pykd::targetStepOut,
"The traget is executing while not returned from the current subroutine"); "The target is executing while not returned from the current subroutine");
python::def("sourceStep", pykd::sourceStep, python::def("sourceStep", pykd::sourceStep,
"The target is executing a single source line"); "The target is executing a single source line");
python::def("sourceStepOver", pykd::sourceStepOver, python::def("sourceStepOver", pykd::sourceStepOver,
@ -272,7 +272,7 @@ void pykd_init()
python::def( "isValid", pykd::isVaValid, python::def( "isValid", pykd::isVaValid,
"Check if the virtual address is valid" ); "Check if the virtual address is valid" );
python::def("isVaRegionValid", pykd::isVaRegionValid, python::def("isVaRegionValid", pykd::isVaRegionValid,
"Check if the virtaul addresses region is valid"); "Check if the virtual addresses region is valid");
python::def( "compareMemory", pykd::compareMemory, compareMemory_( python::args( "offset1", "offset2", "length", "phyAddr" ), python::def( "compareMemory", pykd::compareMemory, compareMemory_( python::args( "offset1", "offset2", "length", "phyAddr" ),
"Compare two memory buffers by virtual or physical addresses" ) ); "Compare two memory buffers by virtual or physical addresses" ) );
python::def( "searchMemory", pykd::searchMemoryLst, python::def( "searchMemory", pykd::searchMemoryLst,
@ -280,7 +280,7 @@ void pykd_init()
python::def( "searchMemory", pykd::searchMemoryStr, python::def( "searchMemory", pykd::searchMemoryStr,
"Search in virtual memory" ); "Search in virtual memory" );
python::def( "findMemoryRegion", pykd::findMemoryRegion, python::def( "findMemoryRegion", pykd::findMemoryRegion,
"Return address of begining valid memory region nearest to offset" ); "Return address of beginning valid memory region nearest to offset" );
python::def( "getVaProtect", pykd::getVaProtect, python::def( "getVaProtect", pykd::getVaProtect,
"Return memory protect" ); "Return memory protect" );
python::def( "getVaType", pykd::getVaType, python::def( "getVaType", pykd::getVaType,
@ -361,9 +361,9 @@ void pykd_init()
python::def( "loadWStr", pykd::loadWStr, python::def( "loadWStr", pykd::loadWStr,
"Load string from the target buffer containing 0-terminated unicode-string" ); "Load string from the target buffer containing 0-terminated unicode-string" );
python::def( "loadUnicodeString", pykd::loadUnicodeStr, python::def( "loadUnicodeString", pykd::loadUnicodeStr,
"Return string represention of windows UNICODE_STRING type" ); "Return string representation of windows UNICODE_STRING type" );
python::def( "loadAnsiString", pykd::loadAnsiStr, python::def( "loadAnsiString", pykd::loadAnsiStr,
"Return string represention of windows ANSI_STRING type" ); "Return string representation of windows ANSI_STRING type" );
python::def( "loadFloats", pykd::loadFloats, loadFloats_( python::args( "offset", "count", "phyAddr" ), python::def( "loadFloats", pykd::loadFloats, loadFloats_( python::args( "offset", "count", "phyAddr" ),
"Read the block of the target's memory and return it as list of floats" ) ); "Read the block of the target's memory and return it as list of floats" ) );
python::def( "loadDoubles", pykd::loadDoubles, loadDoubles_( python::args( "offset", "count", "phyAddr" ), python::def( "loadDoubles", pykd::loadDoubles, loadDoubles_( python::args( "offset", "count", "phyAddr" ),
@ -405,7 +405,7 @@ void pykd_init()
python::def( "setPtr", pykd::setPtr, python::def( "setPtr", pykd::setPtr,
"Write an pointer value to the target memory" ); "Write an pointer value to the target memory" );
// types and vaiables // types and variables
python::def( "getSourceFile", pykd::getSourceFile, getSourceFile_( python::args( "offset"), python::def( "getSourceFile", pykd::getSourceFile, getSourceFile_( python::args( "offset"),
"Return source file by the specified offset" ) ); "Return source file by the specified offset" ) );
python::def("getSourceFileFromSrcSrv", pykd::getSourceFileFromSrcSrv, getSourceFileFromSrcSrv_(python::args("offset"), python::def("getSourceFileFromSrcSrv", pykd::getSourceFileFromSrcSrv, getSourceFileFromSrcSrv_(python::args("offset"),
@ -414,7 +414,7 @@ void pykd_init()
"Return source file name, line and displacement by the specified offset" ) ); "Return source file name, line and displacement by the specified offset" ) );
python::def( "getOffset", pykd::getSymbolOffset, python::def( "getOffset", pykd::getSymbolOffset,
"Return traget virtual address for specified symbol" ); "Return target virtual address for specified symbol" );
python::def( "findSymbol", pykd::findSymbol, findSymbol_( python::args( "offset", "showDisplacement"), python::def( "findSymbol", pykd::findSymbol, findSymbol_( python::args( "offset", "showDisplacement"),
"Find symbol by the target virtual memory offset" ) ); "Find symbol by the target virtual memory offset" ) );
python::def("findSymbolAndDisp", pykd::findSymbolAndDisp, python::def("findSymbolAndDisp", pykd::findSymbolAndDisp,
@ -459,7 +459,7 @@ void pykd_init()
// CPU registers // CPU registers
python::def( "reg", pykd::getRegisterByName, python::def( "reg", pykd::getRegisterByName,
"Return a CPU regsiter value by the register's name" ); "Return a CPU register value by the register's name" );
python::def( "reg", pykd::getRegisterByIndex, python::def( "reg", pykd::getRegisterByIndex,
"Return a CPU register value by the register's number"); "Return a CPU register value by the register's number");
python::def( "setReg", pykd::setRegisterByName, python::def( "setReg", pykd::setRegisterByName,
@ -527,7 +527,7 @@ void pykd_init()
// breakpoints // breakpoints
python::def( "setBp", &Breakpoint::setSoftwareBreakpoint, python::def( "setBp", &Breakpoint::setSoftwareBreakpoint,
setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on executiont" )[python::return_value_policy<python::manage_new_object>()]); setSoftwareBreakpoint_( python::args( "offset", "callback" ),"Set software breakpoint on execution" )[python::return_value_policy<python::manage_new_object>()]);
python::def( "setBp", &Breakpoint::setHardwareBreakpoint, python::def( "setBp", &Breakpoint::setHardwareBreakpoint,
setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy<python::manage_new_object>()]); setHardwareBreakpoint_( python::args( "offset", "size", "accsessType", "callback" ),"Set hardware breakpoint")[python::return_value_policy<python::manage_new_object>()]);
python::def("getNumberBreakpoints", &Breakpoint::getNumberBreakpoints, python::def("getNumberBreakpoints", &Breakpoint::getNumberBreakpoints,
@ -624,7 +624,7 @@ void pykd_init()
"The addSyntheticSymbol function adds a synthetic symbol to a module in the current process\n" "The addSyntheticSymbol function adds a synthetic symbol to a module in the current process\n"
"Note: reloading the symbols for the module deletes all synthetic symbols associated with that module."); "Note: reloading the symbols for the module deletes all synthetic symbols associated with that module.");
python::def( "removeSyntheticSymbol", pykd::removeSyntheticSymbol, python::def( "removeSyntheticSymbol", pykd::removeSyntheticSymbol,
"The removeSyntheticSymbol function removes a synthetic symbol from a module in the current proces" ); "The removeSyntheticSymbol function removes a synthetic symbol from a module in the current process" );
// synthetic module // synthetic module
python::def("addSyntheticModule", pykd::addSyntheticModule, addSyntheticModule_(python::args("base", "size", "name", "path"), python::def("addSyntheticModule", pykd::addSyntheticModule, addSyntheticModule_(python::args("base", "size", "name", "path"),
@ -708,7 +708,7 @@ void pykd_init()
.def("isDumpAnalyzing", TargetSystemAdapter::isDumpAnalyzing, .def("isDumpAnalyzing", TargetSystemAdapter::isDumpAnalyzing,
"Check if it is a dump analyzing ( not living debuggee )") "Check if it is a dump analyzing ( not living debuggee )")
.def("isKernelDebugging", TargetSystemAdapter::isKernelDebugging, .def("isKernelDebugging", TargetSystemAdapter::isKernelDebugging,
"Check if kernel dubugging is running") "Check if kernel debugging is running")
.def("is64bitSystem", TargetSystemAdapter::is64bitSystem, .def("is64bitSystem", TargetSystemAdapter::is64bitSystem,
"Check if 64 bit system running" ) "Check if 64 bit system running" )
.def("isCurrent", TargetSystemAdapter::isCurrent, .def("isCurrent", TargetSystemAdapter::isCurrent,
@ -738,7 +738,7 @@ void pykd_init()
.def("getProcessById", TargetProcessAdapter::getProcessById, .def("getProcessById", TargetProcessAdapter::getProcessById,
"Return process by id").staticmethod("getProcessById") "Return process by id").staticmethod("getProcessById")
.add_property("systemID", TargetProcessAdapter::getSystemId, .add_property("systemID", TargetProcessAdapter::getSystemId,
"Retrun system process ID ( PID )" ) "Return system process ID ( PID )" )
.add_property("id", TargetProcessAdapter::getId, .add_property("id", TargetProcessAdapter::getId,
"Return process id") "Return process id")
.add_property("peb", TargetProcessAdapter::getPebOffset, .add_property("peb", TargetProcessAdapter::getPebOffset,
@ -748,7 +748,7 @@ void pykd_init()
.def("isCurrent", TargetProcessAdapter::isCurrent, .def("isCurrent", TargetProcessAdapter::isCurrent,
"Check if the target is current") "Check if the target is current")
.def("isManaged", TargetProcessAdapter::isManaged, .def("isManaged", TargetProcessAdapter::isManaged,
"Check if the taget process is managed") "Check if the target process is managed")
.def("getNumberThreads", TargetProcessAdapter::getNumberThreads, .def("getNumberThreads", TargetProcessAdapter::getNumberThreads,
"Return number of threads for this process" ) "Return number of threads for this process" )
.def("getThread", TargetProcessAdapter::getThreadByIndex, .def("getThread", TargetProcessAdapter::getThreadByIndex,
@ -798,7 +798,7 @@ void pykd_init()
.add_property("id", TargetThreadAdapter::getId, .add_property("id", TargetThreadAdapter::getId,
"Return thread's id") "Return thread's id")
.add_property("systemID", TargetThreadAdapter::getSystemId, .add_property("systemID", TargetThreadAdapter::getSystemId,
"Retrun system thread ID ( TID )" ) "Return system thread ID ( TID )" )
.add_property("teb", TargetThreadAdapter::getTebOffset, .add_property("teb", TargetThreadAdapter::getTebOffset,
"Return TEB address" ) "Return TEB address" )
.add_property( "ip", TargetThreadAdapter::getIP, .add_property( "ip", TargetThreadAdapter::getIP,
@ -818,7 +818,7 @@ void pykd_init()
.def("isCurrent", TargetThreadAdapter::isCurrent, .def("isCurrent", TargetThreadAdapter::isCurrent,
"Check if this thread is current") "Check if this thread is current")
.def("stack", TargetThreadAdapter::getStack, .def("stack", TargetThreadAdapter::getStack,
"Get thread's stack tarce") "Get thread's stack trace")
.def("__str__", TargetThreadAdapter::print) .def("__str__", TargetThreadAdapter::print)
; ;
@ -1043,7 +1043,7 @@ void pykd_init()
.def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) ) .def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) )
.def("__init__", python::make_constructor(pykd::getTypedVarWithPrototype) ) .def("__init__", python::make_constructor(pykd::getTypedVarWithPrototype) )
.def("getLocation", TypedVarAdapter::getLocation, .def("getLocation", TypedVarAdapter::getLocation,
"Return location of the varibale") "Return location of the variable")
.def("getAddress", TypedVarAdapter::getAddress, .def("getAddress", TypedVarAdapter::getAddress,
"Return virtual address" ) "Return virtual address" )
.def("getDebugStart", TypedVarAdapter::getDebugStart, .def("getDebugStart", TypedVarAdapter::getDebugStart,
@ -1057,13 +1057,13 @@ void pykd_init()
.def("getNumberFields", TypedVarAdapter::getElementCount, .def("getNumberFields", TypedVarAdapter::getElementCount,
"Return number of fields") "Return number of fields")
.def("field", TypedVarAdapter::getField, .def("field", TypedVarAdapter::getField,
"Return fielged of structure") "Return field of structure")
.def("field", TypedVarAdapter::getElementByIndex, .def("field", TypedVarAdapter::getElementByIndex,
"Return field of structure or array" ) "Return field of structure or array" )
.def("setField", TypedVarAdapter::setField, .def("setField", TypedVarAdapter::setField,
"Set field of structure") "Set field of structure")
.def("setField", TypedVarAdapter::setElementByIndex, .def("setField", TypedVarAdapter::setElementByIndex,
"Set field of a structire or an element od array") "Set field of a stricture or an element of array")
.def("hasField", TypedVarAdapter::hasField, .def("hasField", TypedVarAdapter::hasField,
"Check if a typedVar object has the specified field") "Check if a typedVar object has the specified field")
.def( "fields", TypedVarAdapter::getFields, .def( "fields", TypedVarAdapter::getFields,
@ -1269,7 +1269,7 @@ void pykd_init()
.value("ChangeSymbolState", kdlib::EventTypeChangeSymbolState) .value("ChangeSymbolState", kdlib::EventTypeChangeSymbolState)
; ;
python::class_<pykd::DebugEvent>("debugEvent", "Debug evemt descriptions", python::no_init) python::class_<pykd::DebugEvent>("debugEvent", "Debug event descriptions", python::no_init)
.def_readonly("type", &DebugEvent::eventType) .def_readonly("type", &DebugEvent::eventType)
.def_readonly("process", &DebugEvent::process) .def_readonly("process", &DebugEvent::process)
.def_readonly("thread", &DebugEvent::thread) .def_readonly("thread", &DebugEvent::thread)
@ -1283,7 +1283,7 @@ void pykd_init()
.def( "disasm", DisasmAdapter::jump, .def( "disasm", DisasmAdapter::jump,
"Disassemble from the specified offset" ) "Disassemble from the specified offset" )
.def( "asm", DisasmAdapter::assembly, .def( "asm", DisasmAdapter::assembly,
"Insert assemblied instuction to current offset" ) "Insert assembled instruction to current offset" )
.def( "begin", DisasmAdapter::begin, .def( "begin", DisasmAdapter::begin,
"Return begin offset" ) "Return begin offset" )
.def( "current", DisasmAdapter::current, .def( "current", DisasmAdapter::current,
@ -1319,7 +1319,7 @@ void pykd_init()
; ;
python::class_<kdlib::TypeInfoProvider, kdlib::TypeInfoProviderPtr, boost::noncopyable>("typeInfoProvider", python::class_<kdlib::TypeInfoProvider, kdlib::TypeInfoProviderPtr, boost::noncopyable>("typeInfoProvider",
"Get abstaract access to different type info sources", python::no_init) "Get abstract access to different type info sources", python::no_init)
.def( "getTypeByName", TypeInfoProviderAdapter::getTypeByName, .def( "getTypeByName", TypeInfoProviderAdapter::getTypeByName,
"Get type info by it's name" ) "Get type info by it's name" )
.def( "typeIterator", TypeInfoProviderAdapter::getTypeIterWithMask, python::return_value_policy<python::manage_new_object>(), .def( "typeIterator", TypeInfoProviderAdapter::getTypeIterWithMask, python::return_value_policy<python::manage_new_object>(),
@ -1338,7 +1338,7 @@ void pykd_init()
; ;
python::class_<kdlib::SymbolProvider, kdlib::SymbolProviderPtr, boost::noncopyable>("symbolProvider", python::class_<kdlib::SymbolProvider, kdlib::SymbolProviderPtr, boost::noncopyable>("symbolProvider",
"Get abstaract access to different type info sources", python::no_init) "Get abstract access to different type info sources", python::no_init)
.def("iter", SymbolProviderAdapter::getIterWithMask, python::return_value_policy<python::manage_new_object>(), .def("iter", SymbolProviderAdapter::getIterWithMask, python::return_value_policy<python::manage_new_object>(),
"Return type iterator with specified mask") "Return type iterator with specified mask")
.def("__iter__", SymbolProviderAdapter::getIter, python::return_value_policy<python::manage_new_object>()) .def("__iter__", SymbolProviderAdapter::getIter, python::return_value_policy<python::manage_new_object>())
@ -1391,12 +1391,12 @@ void pykd_init()
.value("ARM", kdlib::CPU_ARM ) .value("ARM", kdlib::CPU_ARM )
; ;
python::enum_<kdlib::VarStorage>("Location", "Location of a varibale") python::enum_<kdlib::VarStorage>("Location", "Location of a variable")
.value("Reg", kdlib::RegisterVar) .value("Reg", kdlib::RegisterVar)
.value("Memory", kdlib::MemoryVar) .value("Memory", kdlib::MemoryVar)
; ;
python::enum_<kdlib::MemoryProtect>("memoryProtect", "Memory protection attribiuties") python::enum_<kdlib::MemoryProtect>("memoryProtect", "Memory protection attributes")
.value("PageNoAccess", kdlib::PageNoAccess) .value("PageNoAccess", kdlib::PageNoAccess)
.value("PageReadOnly", kdlib::PageReadOnly) .value("PageReadOnly", kdlib::PageReadOnly)
.value("PageReadWrite", kdlib::PageReadWrite) .value("PageReadWrite", kdlib::PageReadWrite)
@ -1424,7 +1424,7 @@ void pykd_init()
.value("BreakOnStop", kdlib::ProcessBreakOnStop) .value("BreakOnStop", kdlib::ProcessBreakOnStop)
.value("DebugChildren", kdlib::ProcessDebugChildren) .value("DebugChildren", kdlib::ProcessDebugChildren)
.value("NoDebugHeap", kdlib::ProcessNoDebugHeap) .value("NoDebugHeap", kdlib::ProcessNoDebugHeap)
.value("Deafult", kdlib::ProcessDebugDefault) .value("Default", kdlib::ProcessDebugDefault)
; ;
python::class_<EventHandler, boost::noncopyable>( python::class_<EventHandler, boost::noncopyable>(