[0.3.x] added: typedVar for function

git-svn-id: https://pykd.svn.codeplex.com/svn@84455 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\EreTIk_cp 2013-07-24 17:15:44 +00:00 committed by Mikhail I. Izmestev
parent 0f1c514e8c
commit 95162f8de7
3 changed files with 20 additions and 21 deletions

View File

@ -19,7 +19,7 @@ BOOL APIENTRY DllMain( HMODULE hModule,
break; break;
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:
kdlib::uninitialize(); kdlib::uninitialize();
break; break;
} }
return TRUE; return TRUE;

View File

@ -17,12 +17,12 @@ struct TypedVarAdapter {
} }
static kdlib::TypedVarPtr getTypedVarByTypeName( const std::wstring &name, kdlib::MEMOFFSET_64 addr ) { static kdlib::TypedVarPtr getTypedVarByTypeName( const std::wstring &name, kdlib::MEMOFFSET_64 addr ) {
return kdlib::loadTypedVar( name, addr ); return kdlib::loadTypedVar( name, addr, kdlib::SymbolPtr() );
} }
static kdlib::TypedVarPtr getTypedVarByTypeInfo( const kdlib::TypeInfoPtr &typeInfo, kdlib::MEMOFFSET_64 addr ) static kdlib::TypedVarPtr getTypedVarByTypeInfo( const kdlib::TypeInfoPtr &typeInfo, kdlib::MEMOFFSET_64 addr )
{ {
return kdlib::loadTypedVar( typeInfo, addr ); return kdlib::loadTypedVar( typeInfo, addr, kdlib::SymbolPtr() );
} }
static kdlib::MEMOFFSET_32 getFieldOffsetByName( kdlib::TypedVar& typedVar, const std::wstring &name ) { static kdlib::MEMOFFSET_32 getFieldOffsetByName( kdlib::TypedVar& typedVar, const std::wstring &name ) {

View File

@ -234,22 +234,21 @@ class TypedVarTest( unittest.TestCase ):
self.assertEqual( 4, tv.m_fieldNestedStruct ) self.assertEqual( 4, tv.m_fieldNestedStruct )
self.assertEqual( 5, tv.m_fieldOfUnNamed ) self.assertEqual( 5, tv.m_fieldOfUnNamed )
def testPointerToFunction(self): def testFunctionPtr(self):
funcptr = target.module.typedVar( "CdeclFuncPtr" ) funcptr = target.module.typedVar( "CdeclFuncPtr" )
self.assertEqual( funcptr.deref(), target.module.CdeclFunc ) # CdeclFuncPtr -> jmp targetapp!CdeclFunc (00bd1ba0)
# self.assertEqual( funcptr, target.module.CdeclFunc )
self.assertEqual( funcptr.type().deref().name(), target.module.typedVar("CdeclFunc").type().name() )
self.assertEqual( funcptr.type().name(), target.module.typedVar("CdeclFunc").type().ptrTo().name() )
#tv1 = target.module.typedVar( "g_unTypedPtrToFunction" ) def testFunctionRange(self):
func1 = target.module.typedVar("CdeclFunc")
self.assertTrue( func1.getAddress() >= target.module.begin() )
self.assertTrue( func1.getAddress() + func1.sizeof() <= target.module.end() )
# if debug: g_unTypedPtrToFunction point to jmp EnumWindowsProc2 (e9 xxxxxxxx) func2 = target.module.typedVar( target.module.StdcallFunc )
#self.assertTrue( ( target.module.offset("EnumWindowsProc2") == tv1 ) or self.assertTrue( func2.getAddress() >= target.module.begin() )
# ( 0xE9 == pykd.ptrByte( long(tv1) ) ) ) self.assertTrue( func2.getAddress() + func2.sizeof() <= target.module.end() )
#tv2 = target.module.typedVar( "g_unTypedPtrToFunction" )
#self.assertEqual( tv1, tv2 )
#self.assertRaises( pykd.TypeException, tv1.deref )
#self.assertRaises( pykd.TypeException, tv2.deref )
def testTypeVarArg(self): def testTypeVarArg(self):
tv1 = target.module.typedVar( "structTest", target.module.g_structTest ) tv1 = target.module.typedVar( "structTest", target.module.g_structTest )
@ -316,8 +315,8 @@ class TypedVarTest( unittest.TestCase ):
str( field ) str( field )
def testDeadlockList(self): def testDeadlockList(self):
lst = [] lst = []
entry = pykd.typedVar("deadlockEntry").flink entry = pykd.typedVar("deadlockEntry").flink
for i in range( 0, 100000 ): for i in range( 0, 100000 ):
lst.append(entry) lst.append(entry)
entry = entry.deref().flink entry = entry.deref().flink