mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-20 03:23:23 +08:00
[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:
parent
0f1c514e8c
commit
95162f8de7
@ -19,7 +19,7 @@ BOOL APIENTRY DllMain( HMODULE hModule,
|
||||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
kdlib::uninitialize();
|
||||
kdlib::uninitialize();
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -17,12 +17,12 @@ struct TypedVarAdapter {
|
||||
}
|
||||
|
||||
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 )
|
||||
{
|
||||
return kdlib::loadTypedVar( typeInfo, addr );
|
||||
return kdlib::loadTypedVar( typeInfo, addr, kdlib::SymbolPtr() );
|
||||
}
|
||||
|
||||
static kdlib::MEMOFFSET_32 getFieldOffsetByName( kdlib::TypedVar& typedVar, const std::wstring &name ) {
|
||||
|
@ -234,22 +234,21 @@ class TypedVarTest( unittest.TestCase ):
|
||||
self.assertEqual( 4, tv.m_fieldNestedStruct )
|
||||
self.assertEqual( 5, tv.m_fieldOfUnNamed )
|
||||
|
||||
def testPointerToFunction(self):
|
||||
|
||||
def testFunctionPtr(self):
|
||||
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)
|
||||
#self.assertTrue( ( target.module.offset("EnumWindowsProc2") == tv1 ) or
|
||||
# ( 0xE9 == pykd.ptrByte( long(tv1) ) ) )
|
||||
|
||||
#tv2 = target.module.typedVar( "g_unTypedPtrToFunction" )
|
||||
#self.assertEqual( tv1, tv2 )
|
||||
|
||||
#self.assertRaises( pykd.TypeException, tv1.deref )
|
||||
#self.assertRaises( pykd.TypeException, tv2.deref )
|
||||
func2 = target.module.typedVar( target.module.StdcallFunc )
|
||||
self.assertTrue( func2.getAddress() >= target.module.begin() )
|
||||
self.assertTrue( func2.getAddress() + func2.sizeof() <= target.module.end() )
|
||||
|
||||
def testTypeVarArg(self):
|
||||
tv1 = target.module.typedVar( "structTest", target.module.g_structTest )
|
||||
@ -316,8 +315,8 @@ class TypedVarTest( unittest.TestCase ):
|
||||
str( field )
|
||||
|
||||
def testDeadlockList(self):
|
||||
lst = []
|
||||
entry = pykd.typedVar("deadlockEntry").flink
|
||||
for i in range( 0, 100000 ):
|
||||
lst.append(entry)
|
||||
entry = entry.deref().flink
|
||||
lst = []
|
||||
entry = pykd.typedVar("deadlockEntry").flink
|
||||
for i in range( 0, 100000 ):
|
||||
lst.append(entry)
|
||||
entry = entry.deref().flink
|
||||
|
Loading…
Reference in New Issue
Block a user