mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 04:13:22 +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;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
kdlib::uninitialize();
|
kdlib::uninitialize();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -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 ) {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user