mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 04:13:22 +08:00
[0.3.x] added : module.enumTypes method ( return list of types name )
git-svn-id: https://pykd.svn.codeplex.com/svn@90913 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
ff0d434b29
commit
7831e430ae
@ -83,6 +83,7 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( setHardwareBreakpoint_, Breakpoint::setHardware
|
|||||||
|
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( Module_enumSymbols, ModuleAdapter::enumSymbols, 1, 2 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( Module_enumSymbols, ModuleAdapter::enumSymbols, 1, 2 );
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( Module_findSymbol, ModuleAdapter::findSymbol, 2, 3 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( Module_findSymbol, ModuleAdapter::findSymbol, 2, 3 );
|
||||||
|
BOOST_PYTHON_FUNCTION_OVERLOADS( Module_enumTypes, ModuleAdapter::enumTypes, 1, 2 );
|
||||||
|
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( TypeInfo_ptrTo, TypeInfoAdapter::ptrTo, 1, 2 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( TypeInfo_ptrTo, TypeInfoAdapter::ptrTo, 1, 2 );
|
||||||
|
|
||||||
@ -641,50 +642,52 @@ BOOST_PYTHON_MODULE( pykd )
|
|||||||
"Get thread's stack tarce")
|
"Get thread's stack tarce")
|
||||||
;
|
;
|
||||||
|
|
||||||
python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init )
|
python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init)
|
||||||
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByName ) )
|
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByName))
|
||||||
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByOffset) )
|
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByOffset))
|
||||||
.def("begin", ModuleAdapter::getBase,
|
.def("begin", ModuleAdapter::getBase,
|
||||||
"Return start address of the module" )
|
"Return start address of the module")
|
||||||
.def("end", ModuleAdapter::getEnd,
|
.def("end", ModuleAdapter::getEnd,
|
||||||
"Return end address of the module" )
|
"Return end address of the module")
|
||||||
.def("size", ModuleAdapter::getSize,
|
.def("size", ModuleAdapter::getSize,
|
||||||
"Return size of the module" )
|
"Return size of the module")
|
||||||
.def("name", ModuleAdapter::getName,
|
.def("name", ModuleAdapter::getName,
|
||||||
"Return name of the module" )
|
"Return name of the module")
|
||||||
.def("reload", ModuleAdapter::reloadSymbols,
|
.def("reload", ModuleAdapter::reloadSymbols,
|
||||||
"(Re)load symbols for the module" )
|
"(Re)load symbols for the module")
|
||||||
.def("image", ModuleAdapter::getImageName,
|
.def("image", ModuleAdapter::getImageName,
|
||||||
"Return name of the image of the module" )
|
"Return name of the image of the module")
|
||||||
.def("symfile", ModuleAdapter::getSymFile,
|
.def("symfile", ModuleAdapter::getSymFile,
|
||||||
"Return the full path to the module's symbol information" )
|
"Return the full path to the module's symbol information")
|
||||||
.def("offset", ModuleAdapter::getSymbolVa,
|
.def("offset", ModuleAdapter::getSymbolVa,
|
||||||
"Return offset of the symbol" )
|
"Return offset of the symbol")
|
||||||
.def("findSymbol", ModuleAdapter::findSymbol, Module_findSymbol( python::args("offset", "showDisplacement"),
|
.def("findSymbol", ModuleAdapter::findSymbol, Module_findSymbol(python::args("offset", "showDisplacement"),
|
||||||
"Return symbol name by virtual address" ) )
|
"Return symbol name by virtual address"))
|
||||||
.def("findSymbolAndDisp", ModuleAdapter::findSymbolAndDisp,
|
.def("findSymbolAndDisp", ModuleAdapter::findSymbolAndDisp,
|
||||||
"Return tuple(symbol_name, displacement) by virtual address" )
|
"Return tuple(symbol_name, displacement) by virtual address")
|
||||||
.def("rva", ModuleAdapter::getSymbolRva,
|
.def("rva", ModuleAdapter::getSymbolRva,
|
||||||
"Return rva of the symbol" )
|
"Return rva of the symbol")
|
||||||
.def("sizeof", ModuleAdapter::getSymbolSize,
|
.def("sizeof", ModuleAdapter::getSymbolSize,
|
||||||
"Return a size of the type or variable" )
|
"Return a size of the type or variable")
|
||||||
.def("type", ModuleAdapter::getTypeByName,
|
.def("type", ModuleAdapter::getTypeByName,
|
||||||
"Return typeInfo class by type name" )
|
"Return typeInfo class by type name")
|
||||||
.def("typedVar", ModuleAdapter::getTypedVarByAddr,
|
.def("typedVar", ModuleAdapter::getTypedVarByAddr,
|
||||||
"Return a typedVar class instance" )
|
"Return a typedVar class instance")
|
||||||
.def("typedVar",ModuleAdapter::getTypedVarByName,
|
.def("typedVar", ModuleAdapter::getTypedVarByName,
|
||||||
"Return a typedVar class instance" )
|
"Return a typedVar class instance")
|
||||||
.def("typedVar", ModuleAdapter::getTypedVarByTypeName,
|
.def("typedVar", ModuleAdapter::getTypedVarByTypeName,
|
||||||
"Return a typedVar class instance" )
|
"Return a typedVar class instance")
|
||||||
.def("typedVarList", ModuleAdapter::getTypedVarListByTypeName,
|
.def("typedVarList", ModuleAdapter::getTypedVarListByTypeName,
|
||||||
"Return a list of the typedVar class instances. Each item represents an item of the linked list in the target memory" )
|
"Return a list of the typedVar class instances. Each item represents an item of the linked list in the target memory")
|
||||||
.def("typedVarArray", ModuleAdapter::getTypedVarArrayByTypeName,
|
.def("typedVarArray", ModuleAdapter::getTypedVarArrayByTypeName,
|
||||||
"Return a list of the typedVar class instances. Each item represents an item of the counted array in the target memory" )
|
"Return a list of the typedVar class instances. Each item represents an item of the counted array in the target memory")
|
||||||
.def("containingRecord", ModuleAdapter::containingRecord,
|
.def("containingRecord", ModuleAdapter::containingRecord,
|
||||||
"Return instance of the typedVar class. It's value are loaded from the target memory."
|
"Return instance of the typedVar class. It's value are loaded from the target memory."
|
||||||
"The start address is calculated by the same method as the standard macro CONTAINING_RECORD does" )
|
"The start address is calculated by the same method as the standard macro CONTAINING_RECORD does")
|
||||||
.def("enumSymbols", ModuleAdapter::enumSymbols, Module_enumSymbols( python::args("mask"),
|
.def("enumSymbols", ModuleAdapter::enumSymbols, Module_enumSymbols(python::args("mask"),
|
||||||
"Return list of tuple ( symbolname, offset )" ) )
|
"Return list of tuple ( symbolname, offset )"))
|
||||||
|
.def("enumTypes", ModuleAdapter::enumTypes, Module_enumTypes(python::args("mask"),
|
||||||
|
"Return list of types name"))
|
||||||
.def("checksum", ModuleAdapter::getCheckSum,
|
.def("checksum", ModuleAdapter::getCheckSum,
|
||||||
"Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" )
|
"Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" )
|
||||||
.def("timestamp", ModuleAdapter::getTimeDataStamp,
|
.def("timestamp", ModuleAdapter::getTimeDataStamp,
|
||||||
|
@ -70,6 +70,23 @@ python::list ModuleAdapter::enumSymbols( kdlib::Module& module, const std::wstri
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
python::list ModuleAdapter::enumTypes(kdlib::Module& module, const std::wstring &mask)
|
||||||
|
{
|
||||||
|
kdlib::TypeNameList typeLst;
|
||||||
|
|
||||||
|
do {
|
||||||
|
AutoRestorePyState pystate;
|
||||||
|
typeLst = module.enumTypes(mask);
|
||||||
|
} while (false);
|
||||||
|
|
||||||
|
python::list pyLst;
|
||||||
|
for (kdlib::TypeNameList::const_iterator it = typeLst.begin(); it != typeLst.end(); ++it)
|
||||||
|
pyLst.append(*it);
|
||||||
|
return pyLst;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
std::wstring ModuleAdapter::findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement )
|
std::wstring ModuleAdapter::findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement )
|
||||||
{
|
{
|
||||||
|
@ -161,6 +161,8 @@ struct ModuleAdapter : public kdlib::Module
|
|||||||
|
|
||||||
static python::list enumSymbols( kdlib::Module& module, const std::wstring &mask = L"*" );
|
static python::list enumSymbols( kdlib::Module& module, const std::wstring &mask = L"*" );
|
||||||
|
|
||||||
|
static python::list enumTypes(kdlib::Module& module, const std::wstring &mask = L"*");
|
||||||
|
|
||||||
static std::wstring findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement = true );
|
static std::wstring findSymbol( kdlib::Module& module, kdlib::MEMOFFSET_64 offset, bool showDisplacement = true );
|
||||||
|
|
||||||
static python::tuple findSymbolAndDisp( kdlib::Module& module, kdlib::MEMOFFSET_64 offset );
|
static python::tuple findSymbolAndDisp( kdlib::Module& module, kdlib::MEMOFFSET_64 offset );
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
@ -316,3 +316,12 @@ class TypeInfoTest( unittest.TestCase ):
|
|||||||
self.assertEqual(5, len(dir(ti)))
|
self.assertEqual(5, len(dir(ti)))
|
||||||
self.assertTrue("m_field3" in dir(ti))
|
self.assertTrue("m_field3" in dir(ti))
|
||||||
self.assertFalse("m_field33" in dir(ti))
|
self.assertFalse("m_field33" in dir(ti))
|
||||||
|
|
||||||
|
def testEnumTypes(self):
|
||||||
|
lst = target.module.enumTypes()
|
||||||
|
self.assertNotEqual([], lst)
|
||||||
|
lst = target.module.enumTypes("structTest")
|
||||||
|
self.assertEqual(["structTest"], lst)
|
||||||
|
lst = target.module.enumTypes("NonExsistType")
|
||||||
|
self.assertEqual([],lst)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user