mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-29 20:03:33 +08:00
[0.2.x] added : module::enumTypes method ( return list of types names )
git-svn-id: https://pykd.svn.codeplex.com/svn@80753 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
a2ea430be4
commit
2a54a81ca7
@ -311,4 +311,23 @@ python::list Module::enumSymbols( const std::string &mask)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
python::list Module::enumTypes( const std::string &mask )
|
||||||
|
{
|
||||||
|
python::list lst;
|
||||||
|
int tags[] = { SymTagUDT, SymTagEnum };
|
||||||
|
|
||||||
|
for ( size_t i = 0; i < sizeof(tags)/sizeof(tags[0]); ++i )
|
||||||
|
{
|
||||||
|
SymbolPtrList symlst = getSymScope()->findChildren( tags[i], mask, true );
|
||||||
|
|
||||||
|
for ( SymbolPtrList::iterator it = symlst.begin(); it != symlst.end(); ++it )
|
||||||
|
{
|
||||||
|
lst.append( (*it)->getName() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lst;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
}; // end of namespace pykd
|
}; // end of namespace pykd
|
||||||
|
@ -105,6 +105,8 @@ public:
|
|||||||
|
|
||||||
python::list enumSymbols( const std::string &mask = "*" );
|
python::list enumSymbols( const std::string &mask = "*" );
|
||||||
|
|
||||||
|
python::list enumTypes( const std::string &mask = "*" );
|
||||||
|
|
||||||
std::string print();
|
std::string print();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -65,6 +65,8 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( CustomStruct_create, CustomStruct::create, 1, 2
|
|||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( findSymbol_, TypeInfo::findSymbol, 1, 2 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( findSymbol_, TypeInfo::findSymbol, 1, 2 );
|
||||||
|
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Module_enumSymbols, Module::enumSymbols, 0, 1 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Module_enumSymbols, Module::enumSymbols, 0, 1 );
|
||||||
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( Module_enumTypes, Module::enumTypes, 0, 1 );
|
||||||
|
|
||||||
|
|
||||||
BOOST_PYTHON_MODULE( pykd )
|
BOOST_PYTHON_MODULE( pykd )
|
||||||
{
|
{
|
||||||
@ -363,6 +365,8 @@ BOOST_PYTHON_MODULE( pykd )
|
|||||||
"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", &Module::enumSymbols, Module_enumSymbols( python::args("mask"),
|
.def("enumSymbols", &Module::enumSymbols, Module_enumSymbols( python::args("mask"),
|
||||||
"Return list of tuple ( symbolname, offset )" ) )
|
"Return list of tuple ( symbolname, offset )" ) )
|
||||||
|
.def("enumTypes", &Module::enumTypes, Module_enumTypes( python::args("mask"),
|
||||||
|
"Return list of type's names" ))
|
||||||
.def("checksum",&Module::getCheckSum,
|
.def("checksum",&Module::getCheckSum,
|
||||||
"Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" )
|
"Return a image file checksum: IMAGE_OPTIONAL_HEADER.CheckSum" )
|
||||||
.def("timestamp",&Module::getTimeDataStamp,
|
.def("timestamp",&Module::getTimeDataStamp,
|
||||||
|
@ -70,11 +70,26 @@ class ModuleTest( unittest.TestCase ):
|
|||||||
self.assertEqual( 624, lineNo )
|
self.assertEqual( 624, lineNo )
|
||||||
|
|
||||||
def testEnumSymbols( self ):
|
def testEnumSymbols( self ):
|
||||||
|
lst = target.module.enumSymbols()
|
||||||
|
self.assertNotEqual( 0, len(lst) )
|
||||||
lst = target.module.enumSymbols("hello*Str")
|
lst = target.module.enumSymbols("hello*Str")
|
||||||
self.assertEqual( 2, len(lst) )
|
self.assertEqual( 2, len(lst) )
|
||||||
lst = target.module.enumSymbols( "g_const*Value")
|
lst = target.module.enumSymbols( "g_const*Value")
|
||||||
self.assertEqual( 2, len(lst) )
|
self.assertEqual( 2, len(lst) )
|
||||||
lst = target.module.enumSymbols( "*FuncWithName*")
|
lst = target.module.enumSymbols( "*FuncWithName*")
|
||||||
self.assertEqual( 3, len(lst) )
|
self.assertEqual( 3, len(lst) )
|
||||||
self.assertNotEqual( 0, len(target.module.enumSymbols( "*virtFunc*") ) )
|
lst = target.module.enumSymbols( "*virtFunc*")
|
||||||
|
self.assertNotEqual( 0, len(lst) )
|
||||||
|
lst = target.module.enumSymbols( "classChild" )
|
||||||
|
self.assertEqual( 0, len(lst) )
|
||||||
|
|
||||||
|
|
||||||
|
def testEnumTypes( self ):
|
||||||
|
lst = target.module.enumTypes()
|
||||||
|
self.assertNotEqual( 0, len(lst) )
|
||||||
|
lst = target.module.enumTypes("*class*")
|
||||||
|
self.assertEqual( 2, len(lst) )
|
||||||
|
self.assertTrue( "classChild" in lst )
|
||||||
|
self.assertTrue( "classBase" in lst )
|
||||||
|
lst = target.module.enumTypes("hello*Str")
|
||||||
|
self.assertEqual( 0, len(lst) )
|
||||||
|
Loading…
Reference in New Issue
Block a user