diff --git a/changelist.txt b/changelist.txt
index 3411239..e4a9e83 100644
--- a/changelist.txt
+++ b/changelist.txt
@@ -1,3 +1,9 @@
+version 0.1.0.13 17/05/2012
+
+[!] fixed : issue #10722 ( rdmsr raises exception )
+[!] fixed : issue #10763 ( member derived from different base classes )
+[!] fixed : issue #10764 ( typedVar for class does not contain field for vtable )
+
version 0.1.0.12 24/04/2012
[+] added : get/set load address for DIA global scope
diff --git a/pykd/pykdver.h b/pykd/pykdver.h
index b3c37f1..c8ef038 100644
--- a/pykd/pykdver.h
+++ b/pykd/pykdver.h
@@ -2,7 +2,7 @@
#define PYKD_VERSION_MAJOR 0
#define PYKD_VERSION_MINOR 1
#define PYKD_VERSION_SUBVERSION 0
-#define PYKD_VERSION_BUILDNO 12
+#define PYKD_VERSION_BUILDNO 13
#define __VER_STR2__(x) #x
diff --git a/snippets/ndis.py b/snippets/ndis.py
index c110993..29b76c2 100644
--- a/snippets/ndis.py
+++ b/snippets/ndis.py
@@ -18,7 +18,7 @@ def printNdisObj():
ndisMajorVersion = ptrByte( ndis.NdisGetVersion + 1 )
ndisMinorVersion = ptrByte( ndis.NdisGetVersion + 3 )
- mpList = typedVarList( ndis.ndisMiniportList, "ndis", "_NDIS_MINIPORT_BLOCK", "NextGlobalMiniport" )
+ mpList = ndis.typedVarList( ndis.ndisMiniportList, "_NDIS_MINIPORT_BLOCK", "NextGlobalMiniport" )
printBreakLine()
@@ -37,7 +37,7 @@ def printNdisObj():
while lwf != 0:
- filt = typedVar( "ndis", "_NDIS_FILTER_BLOCK", lwf )
+ filt = typedVar( "ndis!_NDIS_FILTER_BLOCK", lwf )
dprintln( "%s\tNDIS_FILTER_BLOCK( %x )" % ( loadUnicodeString(filt.FilterFriendlyName), filt.getAddress(), filt.getAddress() ), True )
@@ -51,9 +51,9 @@ def printNdisObj():
while opn != 0:
- openBlock = typedVar( "ndis", "_NDIS_OPEN_BLOCK", opn )
+ openBlock = typedVar( "ndis!_NDIS_OPEN_BLOCK", opn )
- proto = typedVar( "ndis", "_NDIS_PROTOCOL_BLOCK", openBlock.ProtocolHandle )
+ proto = typedVar( "ndis!_NDIS_PROTOCOL_BLOCK", openBlock.ProtocolHandle )
dprint( "%s \tNDIS_OPEN_BLOCK( %x )" % ( loadUnicodeString( proto.Name.getAddress() ), openBlock.getAddress(), openBlock.getAddress() ), True )
dprintln( "\tNDIS_PROTOCOL_BLOCK( %x )" % ( proto.getAddress(), proto.getAddress() ), True )
diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py
index 1c981d3..103d3e5 100644
--- a/test/scripts/typedvar.py
+++ b/test/scripts/typedvar.py
@@ -237,11 +237,16 @@ class TypedVarTest( unittest.TestCase ):
self.assertTrue( str(target.module.typedVar( "g_unTypedPtrToFunction" ) ) )
def testStaticField(self):
- ti = pykd.typedVar( "g_classChild" )
- self.assertEqual( 200, ti.m_staticField )
- self.assertEqual( 100, ti.m_staticConst )
+ tv = pykd.typedVar( "g_classChild" )
+ self.assertEqual( 200, tv.m_staticField )
+ self.assertEqual( 100, tv.m_staticConst )
def testAmbiguousFieldAccess(self):
derivedFiledVal = pykd.loadCStr( pykd.typedVar( "g_fieldSameNameStruct" ).m_field )
self.assertEqual( derivedFiledVal, "toaster" )
print target.module.type("fieldSameNameStruct")
+
+ def testDiamondVirtualInherit(self):
+ tv = pykd.typedVar( "g_virtChild" )
+ print tv
+ self.assertEqual( -100, tv.m_baseField )
diff --git a/test/scripts/typeinfo.py b/test/scripts/typeinfo.py
index 4db44f0..149cfe6 100644
--- a/test/scripts/typeinfo.py
+++ b/test/scripts/typeinfo.py
@@ -184,3 +184,4 @@ class TypeInfoTest( unittest.TestCase ):
self.assertNotEqual( 0, ti.m_staticField.offset() )
self.assertNotEqual( 0, ti.m_staticConst.offset() )
self.assertNotEqual( 0, ti.m_stdstr.offset() )
+
diff --git a/test/targetapp/targetapp.cpp b/test/targetapp/targetapp.cpp
index 3330dce..60a10fd 100644
--- a/test/targetapp/targetapp.cpp
+++ b/test/targetapp/targetapp.cpp
@@ -335,7 +335,7 @@ public:
virtual void virtFunc2() {}
};
-class VirtualChildClass : public VirtualBaseClass1, public VirtualBaseClass2
+class VirtualChildClass : public VirtualBaseClass1, public VirtualBaseClass2, public virtual classBase
{
void virtFunc() {}
void virtFunc2() {}