def testWi12591(self):
     tb = pykd.typeBuilder()
     struct = tb.createStruct(name="MyAlignStruct", align=4)
     struct.append("m_field1", tb.UInt1B)
     struct.append("m_field2", tb.UInt1B.arrayOf(2))
     self.assertEqual(struct.size(), 3)
     self.assertEqual(struct.fieldOffset("m_field2"), 1)
 def testWi12592(self):
     tb = pykd.typeBuilder()
     struct = tb.createStruct(name="MyAlignStruct", align=4)
     struct.append("field1", tb.UInt4B)
     struct.append("field2", tb.UInt1B)
     self.assertEqual(struct.size(), 8)
     self.assertEqual(struct.fieldOffset("field2"), 4)
 def testUnionAlignedSize(self):
     tb = pykd.typeBuilder()
     union = tb.createUnion("MyCustomUnion", align=4)
     union.append("m_field1", tb.UInt2B)
     self.assertEqual(2, union.size())
     union.append("m_field2", tb.UInt1B.arrayOf(3))
     self.assertEqual(4, union.size())
 def testPtrToCustomType(self):
     tb = pykd.typeBuilder()
     mySubStruct = tb.createStruct("MySubCustomStruct")
     mySubStruct.append("m_uint1", tb.UInt1B)
     mySubStruct.append("m_uint2", tb.UInt2B)
     mySubStructPtr = mySubStruct.ptrTo()
     self.assertEqual(pykd.ptrSize(), mySubStructPtr.size())
    def testCommonUnion(self):
        tb = pykd.typeBuilder()

        myType = tb.createUnion("MyCustomStruct")
        myType.append("m_uint1", tb.UInt1B)
        myType.append("m_uint4", tb.UInt4B)
        myType.append("m_uint2", tb.UInt2B)

        self.assertFalse(myType.size() == 0)
        self.assertTrue(myType.fieldOffset("m_uint1") == 0)
        self.assertTrue(myType.fieldOffset("m_uint4") == 0)
        self.assertTrue(myType.fieldOffset("m_uint2") == 0)
 def testVoidPtr(self):
     self.assertEqual(4, pykd.typeBuilder(4).VoidPtr.size())
     self.assertEqual(8, pykd.typeBuilder(8).VoidPtr.size())
     self.assertEqual(pykd.ptrSize(), pykd.typeBuilder().VoidPtr.size())
     self.assertEqual(4, pykd.typeBuilder(4).UInt1B.ptrTo().size())
     self.assertEqual(8, pykd.typeBuilder(8).UInt1B.ptrTo().size())
     self.assertEqual(pykd.ptrSize(),
                      pykd.typeBuilder().UInt1B.ptrTo().size())
 def testBasicType(self):
     tb = pykd.typeBuilder()
     self.assertEqual(1, tb.UInt1B.size())
     self.assertEqual(2, tb.UInt2B.size())
     self.assertEqual(4, tb.UInt4B.size())
     self.assertEqual(8, tb.UInt8B.size())
     self.assertEqual(1, tb.Int1B.size())
     self.assertEqual(2, tb.Int2B.size())
     self.assertEqual(4, tb.Int4B.size())
     self.assertEqual(8, tb.Int8B.size())
     self.assertEqual(1, tb.Bool.size())
     self.assertEqual(1, tb.Char.size())
     self.assertEqual(2, tb.WChar.size())
     self.assertEqual(4, tb.Long.size())
     self.assertEqual(4, tb.ULong.size())
    def testCommonStruct(self):
        tb = pykd.typeBuilder()

        mySubStruct = tb.createStruct("MySubCustomStruct")
        mySubStruct.append("m_uint1", tb.UInt1B)
        mySubStruct.append("m_uint2", tb.UInt2B)

        mySubUnion = tb.createUnion("MySubCustomUnion")
        mySubUnion.append("m_uint1", tb.UInt1B)
        mySubUnion.append("m_uint2", tb.UInt2B)

        myType = tb.createStruct("MyCustomStruct")
        myType.append("m_uint1", tb.UInt1B)
        myType.append("m_uint4", tb.UInt4B)
        myType.append("m_uint2", tb.UInt2B)
        myType.append("m_struct", mySubStruct)
        myType.append("m_union", mySubUnion)
        myType.append("m_uint8", tb.UInt8B)

        self.assertTrue(myType.size() != 0)
        self.assertTrue(myType.size() >= myType.fieldOffset("m_uint8") +
                        myType.m_uint8.size())

        self.assertTrue(myType.fieldOffset("m_uint1") == 0)

        self.assertTrue(
            myType.fieldOffset("m_uint1") < myType.fieldOffset("m_uint4"))
        self.assertTrue(
            myType.fieldOffset("m_uint1") +
            myType.m_uint1.size() <= myType.fieldOffset("m_uint4"))

        self.assertTrue(
            myType.fieldOffset("m_uint4") < myType.fieldOffset("m_uint2"))
        self.assertTrue(
            myType.fieldOffset("m_uint4") +
            myType.m_uint4.size() <= myType.fieldOffset("m_uint2"))

        self.assertTrue(
            myType.fieldOffset("m_uint2") < myType.fieldOffset("m_struct"))
        self.assertTrue(
            myType.fieldOffset("m_uint2") +
            myType.m_uint2.size() <= myType.fieldOffset("m_struct"))

        self.assertTrue(
            myType.fieldOffset("m_struct") < myType.fieldOffset("m_union"))
        self.assertTrue(
            myType.fieldOffset("m_struct") +
            myType.m_struct.size() <= myType.fieldOffset("m_union"))
    def testEmptyType(self):
        tb = pykd.typeBuilder()

        myEmptyStruct1 = tb.createStruct("EmptyStruct1")
        self.assertEqual(0, myEmptyStruct1.size())

        myEmptyStruct1.append("m_emptyStruct2",
                              tb.createStruct("EmptyStruct2"))
        self.assertEqual(0, myEmptyStruct1.size())

        myEmptyUnion1 = tb.createUnion("EmptyUnion1")
        self.assertEqual(0, myEmptyUnion1.size())

        myEmptyStruct1.append("m_emptyUnion2", myEmptyUnion1)
        self.assertEqual(0, myEmptyStruct1.size())

        myEmptyUnion1.append("m_emptyStruct3", tb.createStruct("EmptyStruct3"))
        self.assertEqual(0, myEmptyUnion1.size())
Пример #10
0
    def testPtrTo(self):
        tvBaseType = pykd.typedVar(
            pykd.typeInfo("UInt8B").ptrTo(),
            target.module.offset("g_pUlonglongValue"))
        self.assertEqual(target.module.typedVar("g_ulonglongValue"),
                         tvBaseType.deref())

        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)
        customStructTest.append("m_field0", pykd.typeInfo("UInt4B"))
        customStructTest.append("m_field1", pykd.typeInfo("UInt8B"))
        tvCustomStruct = pykd.typedVar(customStructTest.ptrTo(),
                                       target.module.offset("g_structTestPtr"))
        self.assertEqual(500, tvCustomStruct.deref().m_field1)
    def testDupFieldName(self):
        tb = pykd.typeBuilder()

        myType = tb.createStruct("MyCustomStruct")
        exceptionRised = False
        myType.append("m_uint1", tb.UInt1B)
        try:
            myType.append("m_uint1", tb.UInt1B)
        except pykd.TypeException:
            exceptionRised = True
        self.assertTrue(exceptionRised)

        myType = tb.createUnion("MyCustomStruct")
        exceptionRised = False
        myType.append("m_uint1", tb.UInt1B)
        try:
            myType.append("m_uint1", tb.UInt1B)
        except pykd.TypeException:
            exceptionRised = True
        self.assertTrue(exceptionRised)
    def testAlign(self):
        tb = pykd.typeBuilder()
        struct = tb.createStruct(name="MyAlignStruct", align=4)
        struct.append("m_field1", tb.UInt1B)
        self.assertEqual(1, struct.size())
        struct.append("m_field2", tb.UInt1B)
        self.assertEqual(2, struct.size())
        struct.append("m_field3", tb.UInt1B)
        struct.append("m_field4", tb.UInt2B)
        self.assertEqual(6, struct.size())
        struct.append("m_field5", tb.UInt4B)
        self.assertEqual(12, struct.size())
        struct.append("m_field6", tb.UInt1B)
        self.assertEqual(16, struct.size())
        struct.append("m_field7", tb.UInt1B.arrayOf(5))
        self.assertEqual(20, struct.size())

        struct = tb.createStruct(name="MyAlignStruct", align=1)
        struct.append("m_field1", tb.UInt1B)
        struct.append("m_field2", tb.UInt8B)
        self.assertEqual(9, struct.size())