mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 04:13:22 +08:00
[0.3.x] updared: tests
git-svn-id: https://pykd.svn.codeplex.com/svn@83833 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
c5b9a4ca93
commit
624d678245
@ -148,17 +148,17 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
python::class_<kdlib::DbgIn, boost::noncopyable>( "din", "din", python::no_init )
|
||||
.def( "readline", &kdlib::DbgIn::readline );
|
||||
|
||||
// // system properties
|
||||
// python::def( "ptrSize", &ptrSize,
|
||||
// "Return effective pointer size" );
|
||||
// python::def( "is64bitSystem", &is64bitSystem,
|
||||
// "Check if target system has 64 address space" );
|
||||
// python::def( "pageSize", &getPageSize,
|
||||
// "Get the page size for the currently executing processor context" );
|
||||
// python::def( "systemUptime", &getSystemUptime,
|
||||
// "Return the number of seconds the computer has been running" );
|
||||
// python::def( "currentTime", &getCurrentTime,
|
||||
// "Return the number of seconds since the beginning of 1970" );
|
||||
// system properties
|
||||
python::def( "ptrSize", &kdlib::ptrSize,
|
||||
"Return effective pointer size" );
|
||||
python::def( "is64bitSystem", &kdlib::is64bitSystem,
|
||||
"Check if target system has 64 address space" );
|
||||
python::def( "pageSize", &kdlib::getPageSize,
|
||||
"Get the page size for the currently executing processor context" );
|
||||
python::def( "systemUptime", &kdlib::getSystemUptime,
|
||||
"Return the number of seconds the computer has been running" );
|
||||
python::def( "currentTime", &kdlib::getCurrentTime,
|
||||
"Return the number of seconds since the beginning of 1970" );
|
||||
//python::def("getSystemVersion", &getSystemVersion,
|
||||
// "Return systemVersion");
|
||||
|
||||
@ -249,8 +249,8 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
// "Find symbol by the target virtual memory offset" ) );
|
||||
// python::def("findSymbolAndDisp", &pysupport::findSymbolAndDisp,
|
||||
// "Return tuple(symbol_name, displacement) by virtual address" );
|
||||
// python::def( "sizeof", &TypeInfo::getSymbolSize,
|
||||
// "Return a size of the type or variable" );
|
||||
python::def( "sizeof", &kdlib::getSymbolSize,
|
||||
"Return a size of the type or variable" );
|
||||
// python::def("typedVarList", &getTypedVarListByTypeName,
|
||||
// "Return a list of the typedVar class instances. Each item represents an item of the linked list in the target memory" );
|
||||
// python::def("typedVarList", &getTypedVarListByType,
|
||||
@ -394,8 +394,8 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
"Return tuple(symbol_name, displacement) by virtual address" )
|
||||
.def("rva", &kdlib::Module::getSymbolRva,
|
||||
"Return rva of the symbol" )
|
||||
//.def("sizeof", &Module::getSymbolSize,
|
||||
// "Return a size of the type or variable" )
|
||||
.def("sizeof", &kdlib::Module::getSymbolSize,
|
||||
"Return a size of the type or variable" )
|
||||
.def("type", &kdlib::Module::getTypeByName,
|
||||
"Return typeInfo class by type name" )
|
||||
//.def("getUdts", &Module::getUdts,
|
||||
@ -460,8 +460,8 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
// "Return pointer to the type" )
|
||||
//.def( "arrayOf", &kdlib::TypeInfo::arrayOf,
|
||||
// "Return array of the type" )
|
||||
//.def( "__str__", &TypeInfo::print,
|
||||
// "Return typa as a printable string" )
|
||||
.def( "__str__", &TypeInfoAdapter::print,
|
||||
"Return typa as a printable string" )
|
||||
.def( "__getattr__", TypeInfoAdapter::getElementByName )
|
||||
.def("__len__", &kdlib::TypeInfo::getElementCount )
|
||||
.def("__getitem__", TypeInfoAdapter::getElementByIndex )
|
||||
@ -488,7 +488,7 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
"Return typeInfo instance" )*/
|
||||
.def("__getattr__", TypedVarAdapter::getField,
|
||||
"Return field of structure as an object attribute" )
|
||||
//.def( "__str__", &kdlib::TypedVar::print )
|
||||
.def( "__str__", &TypedVarAdapter::print )
|
||||
.def("__len__", &kdlib::TypedVar::getElementCount )
|
||||
.def("__getitem__", &TypedVarAdapter::getElementByIndex )
|
||||
//.def("__getitem__", &kdlib::TypedVar::getElementByIndexPtr )
|
||||
|
@ -32,6 +32,10 @@ struct TypedVarAdapter {
|
||||
return typedVar.getElement( index );
|
||||
}
|
||||
|
||||
static std::wstring print( kdlib::TypedVar& typedVar ) {
|
||||
return L"TYPEDVAR STR";
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // end namespace pykd
|
||||
|
@ -30,6 +30,10 @@ struct TypeInfoAdapter : public kdlib::TypeInfo {
|
||||
return typeInfo.getElement(index);
|
||||
}
|
||||
|
||||
static std::wstring print( kdlib::TypeInfo &typeInfo ) {
|
||||
return L"TYPEINFO STR";
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // end namespace pykd
|
||||
|
@ -22,23 +22,20 @@ class TypedVarTest( unittest.TestCase ):
|
||||
tv = pykd.typedVar( target.moduleName + "!g_structTest" )
|
||||
|
||||
def testBaseTypes(self):
|
||||
self.assertEqual( 1, target.module.typedVar( "g_ucharValue" ) )
|
||||
self.assertEqual( 2, target.module.typedVar( "g_ushortValue" ) )
|
||||
self.assertEqual( 4, target.module.typedVar( "g_ulongValue" ) )
|
||||
self.assertEqual( 8, target.module.typedVar( "g_ulonglongValue" ) )
|
||||
self.assertEqual( -1, target.module.typedVar( "g_charValue" ) )
|
||||
self.assertEqual( -2, target.module.typedVar( "g_shortValue" ) )
|
||||
self.assertEqual( -4, target.module.typedVar( "g_longValue" ) )
|
||||
self.assertEqual( -8, target.module.typedVar( "g_longlongValue" ) )
|
||||
self.assertEqual( 1, target.module.typedVar( "ucharVar" ) )
|
||||
self.assertEqual( 2, target.module.typedVar( "ushortVar" ) )
|
||||
self.assertEqual( 4, target.module.typedVar( "ulongVar" ) )
|
||||
self.assertEqual( 8, target.module.typedVar( "ulonglongVar" ) )
|
||||
self.assertEqual( -1, target.module.typedVar( "charVar" ) )
|
||||
self.assertEqual( -2, target.module.typedVar( "shortVar" ) )
|
||||
self.assertEqual( -4, target.module.typedVar( "longVar" ) )
|
||||
self.assertEqual( -8, target.module.typedVar( "longlongVar" ) )
|
||||
|
||||
def testPtrTo(self):
|
||||
tvBaseType = pykd.typedVar( pykd.typeInfo("UInt8B").ptrTo(),
|
||||
target.module.offset("g_pUlonglongValue") )
|
||||
self.assertEqual( target.module.typedVar( "g_ulonglongValue" ),
|
||||
tvBaseType.deref() )
|
||||
tvBaseType = pykd.typedVar( pykd.typeInfo("UInt8B").ptrTo(), target.module.offset("pbigValue") )
|
||||
self.assertEqual( target.module.typedVar( "g_ulonglongValue" ), tvBaseType.deref() )
|
||||
|
||||
tvDiaStruct = pykd.typedVar( target.module.type("structTest").ptrTo(),
|
||||
target.module.offset("g_structTestPtr") )
|
||||
tvDiaStruct = pykd.typedVar( target.module.type("structTest").ptrTo(), target.module.offset("g_structTestPtr") )
|
||||
self.assertEqual( 500, tvDiaStruct.deref().m_field1 )
|
||||
|
||||
customStructTest = pykd.typeBuilder().createStruct("customStructTest", 4)
|
||||
@ -77,7 +74,7 @@ class TypedVarTest( unittest.TestCase ):
|
||||
|
||||
self.assertEqual( pykd.sizeof("g_structTest"), tv1.sizeof() )
|
||||
self.assertEqual( pykd.sizeof("g_testArray"), tv2.sizeof() )
|
||||
self.assertEqual( pykd.sizeof("g_ucharValue"), 1 )
|
||||
self.assertEqual( pykd.sizeof("ucharVar"), 1 )
|
||||
|
||||
def testByAddress( self ):
|
||||
tv1 = target.module.typedVar( "structTest", target.module.g_structTest )
|
||||
@ -126,11 +123,11 @@ class TypedVarTest( unittest.TestCase ):
|
||||
# self.assertEqual( 2, tv.m_arrayField[-1] )
|
||||
|
||||
def testGlobalVar(self):
|
||||
self.assertEqual( 4, target.module.typedVar( "g_ulongValue" ) )
|
||||
self.assertEqual( 10002000, target.module.typedVar( "ulongVar" ) )
|
||||
self.assertEqual( 0x80000000, target.module.typedVar( "ulongArray" )[3] )
|
||||
self.assertEqual( 0x8000000000000000, target.module.typedVar( "ulonglongArray" )[3] )
|
||||
self.assertEqual( -100000, target.module.typedVar( "longArray" )[3])
|
||||
self.assertEqual( -10000000000, target.module.typedVar( "longlongArray" )[4])
|
||||
self.assertEqual( 0x7FFFFFFF, target.module.typedVar( "longArray" )[3])
|
||||
self.assertEqual( -1, target.module.typedVar( "longlongArray" )[4])
|
||||
self.assertEqual( target.module.g_structTest, target.module.typedVar( "g_structTestPtr" ) )
|
||||
|
||||
def testContainingRecord(self):
|
||||
@ -200,12 +197,12 @@ class TypedVarTest( unittest.TestCase ):
|
||||
self.assertEqual( tv1.m_field3, tv2[0][1] )
|
||||
|
||||
def testEnum(self):
|
||||
tv = target.module.typedVar("g_classChild")
|
||||
self.assertEqual( 3, tv.m_enumField )
|
||||
self.assertEqual( target.module.type("enumType").THREE, tv.m_enumField )
|
||||
tv = target.module.typedVar("g_constEnumThree")
|
||||
self.assertEqual( 3, tv )
|
||||
self.assertEqual( target.module.type("enumType").THREE, tv )
|
||||
|
||||
def testIndex(self):
|
||||
ind = target.module.typedVar( "g_ucharValue" )
|
||||
ind = target.module.typedVar( "ucharVar" )
|
||||
self.assertEqual( 5, [0,5,10][ind] )
|
||||
|
||||
self.assertTrue( ind in [0,1,2] )
|
||||
@ -213,7 +210,7 @@ class TypedVarTest( unittest.TestCase ):
|
||||
tv = target.module.typedVar( "g_structWithArray" )
|
||||
self.assertEqual( 2, tv.m_arrayField[ind] )
|
||||
|
||||
ind = target.module.typedVar( "g_ulongValue" )
|
||||
ind = target.module.typedVar( "ulongValue" )
|
||||
self.assertEqual( 4, ind )
|
||||
self.assertTrue( ind in { 1 : "1", 4 : "2" } )
|
||||
self.assertEqual( "2", { 1 : "1", 4 : "2" }[ind] )
|
||||
@ -228,7 +225,7 @@ class TypedVarTest( unittest.TestCase ):
|
||||
try:
|
||||
tv.m_field1.deref()
|
||||
self.assertTrue(False)
|
||||
except pykd.BaseException:
|
||||
except pykd.TypeException:
|
||||
pass
|
||||
|
||||
def testSkipDeref(self):
|
||||
@ -260,10 +257,10 @@ class TypedVarTest( unittest.TestCase ):
|
||||
self.assertTrue( tv1 )
|
||||
|
||||
def testPrint(self):
|
||||
self.assertTrue( str(target.module.typedVar( "g_ucharValue" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_ushortValue" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_ulongValue" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_ulonglongValue" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "ucharVar" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "ushortVar" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "ulongVar" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "ulonglongVar" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_structWithBits" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_structTest" ) ) )
|
||||
self.assertTrue( str(target.module.typedVar( "g_structTest1" ) ) )
|
||||
@ -319,7 +316,7 @@ class TypedVarTest( unittest.TestCase ):
|
||||
entry = entry.deref().Flink
|
||||
|
||||
def testWrongArgs(self):
|
||||
self.assertRaises( pykd.BaseException, pykd.typedVar, None, 0 )
|
||||
self.assertRaises( pykd.BaseException, pykd.typedVarList, target.module.g_listHead1, None, "next" )
|
||||
self.assertRaises( pykd.BaseException, pykd.typedVarArray, target.module.g_testArray, None, 2 )
|
||||
self.assertRaises( pykd.BaseException, pykd.containingRecord, target.module.offset( "g_structTest" ), None, "m_field2" )
|
||||
self.assertRaises( pykd.TypeException, pykd.typedVar, None, 0 )
|
||||
self.assertRaises( pykd.TypeException, pykd.typedVarList, target.module.g_listHead1, None, "next" )
|
||||
self.assertRaises( pykd.TypeException, pykd.typedVarArray, target.module.g_testArray, None, 2 )
|
||||
self.assertRaises( pykd.TypeException, pykd.containingRecord, target.module.offset( "g_structTest" ), None, "m_field2" )
|
||||
|
@ -107,9 +107,12 @@ class TypeInfoTest( unittest.TestCase ):
|
||||
self.assertEqual( 12, ti1.fieldOffset("m_field2") )
|
||||
self.assertEqual( 14, ti1.fieldOffset("m_field3") )
|
||||
|
||||
ti2 = target.module.type( "struct2" )
|
||||
self.assertTrue( ti2.fieldOffset("m_union") >= ti2.m_struct.size() )
|
||||
self.assertEqual( 0, ti2.m_union.fieldOffset("m_value") )
|
||||
ti2 = target.module.type( "unionTest" )
|
||||
self.assertEqual( 0, ti2.fieldOffset("m_value") )
|
||||
self.assertEqual( 0, ti2.fieldOffset("m_structValue") )
|
||||
|
||||
ti3 = target.module.type( "structWithNested" )
|
||||
self.assertEqual( ti3.fieldOffset( "m_unnameStruct"), ti3.fieldOffset( "m_unnameStruct.m_field2" ) )
|
||||
|
||||
def testSize( self ):
|
||||
ti1 = target.module.type( "structTest" )
|
||||
@ -165,19 +168,19 @@ class TypeInfoTest( unittest.TestCase ):
|
||||
self.assertRaises( pykd.BaseException, ti.deref );
|
||||
|
||||
def testNestedStruct( self ):
|
||||
ti = target.module.type("StructWithNested")
|
||||
ti = target.module.type("structWithNested")
|
||||
self.assertTrue( hasattr( ti, "m_field" ) )
|
||||
self.assertTrue( hasattr( ti, "m_field2" ) )
|
||||
self.assertFalse( hasattr( ti, "m_nestedFiled" ) )
|
||||
|
||||
ti = target.module.type("StructWithNested::Nested")
|
||||
ti = target.module.type("structWithNested::Nested")
|
||||
self.assertTrue( hasattr( ti, "m_nestedFiled" ) )
|
||||
|
||||
def testPrint(self):
|
||||
self.assertTrue( str(target.module.type( "g_ucharValue" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_ushortValue" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_ulongValue" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_ulonglongValue" ) ) )
|
||||
self.assertTrue( str(target.module.type( "ucharVar" ) ) )
|
||||
self.assertTrue( str(target.module.type( "ushortVar" ) ) )
|
||||
self.assertTrue( str(target.module.type( "ulongVar" ) ) )
|
||||
self.assertTrue( str(target.module.type( "ulonglongVar" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_structWithBits" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_structTest" ) ) )
|
||||
self.assertTrue( str(target.module.type( "g_structTest1" ) ) )
|
||||
|
Loading…
Reference in New Issue
Block a user