示例#1
0
    def cb_sym(self, symtype, *args):
        if symtype == addrxlat.SYM_VALUE:
            ms = gdb.lookup_minimal_symbol(args[0])
            if ms is not None:
                return long(ms.value().address)
        elif symtype == addrxlat.SYM_SIZEOF:
            sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                return sym.type.sizeof
        elif symtype == addrxlat.SYM_OFFSETOF:
            sym = gdb.lookup_symbol(args[0], None, gdb.SYMBOL_STRUCT_DOMAIN)[0]
            if sym is None:
                # this works for typedefs:
                sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                return offsetof(sym.type, args[1])

        return super(TranslationContext, self).cb_sym(symtype, *args)
示例#2
0
    def cb_sym(self, symtype, *args):
        if symtype == addrxlat.SYM_VALUE:
            ms = gdb.lookup_minimal_symbol(args[0])
            if ms is not None:
                return long(ms.value().address)
        elif symtype == addrxlat.SYM_SIZEOF:
            sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                return sym.type.sizeof
        elif symtype == addrxlat.SYM_OFFSETOF:
            sym = gdb.lookup_symbol(args[0], None, gdb.SYMBOL_STRUCT_DOMAIN)[0]
            if sym is None:
                # this works for typedefs:
                sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                return offsetof(sym.type, args[1])

        return super(TranslationContext, self).cb_sym(symtype, *args)
示例#3
0
    def cb_sym(self, symtype: int, *args: str) -> int:
        if symtype == addrxlat.SYM_VALUE:
            ms = gdb.lookup_minimal_symbol(args[0])
            if ms is not None:
                return int(ms.value().address)
        elif symtype == addrxlat.SYM_SIZEOF:
            sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                return sym.type.sizeof
        elif symtype == addrxlat.SYM_OFFSETOF:
            sym = gdb.lookup_symbol(args[0], None, gdb.SYMBOL_STRUCT_DOMAIN)[0]
            if sym is None:
                # this works for typedefs:
                sym = gdb.lookup_symbol(args[0], None)[0]
            if sym is not None:
                ret = offsetof(sym.type, args[1], True)
                if ret is None:
                    raise RuntimeError("offsetof can't return None with errors=True")

        return super().cb_sym(symtype, *args)
示例#4
0
 def test_ulong_by_symbol(self):
     t = gdb.lookup_global_symbol('global_ulong_symbol')
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof(t, 'test_member')
示例#5
0
 def test_invalid_member(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'invalid_member')
示例#6
0
 def test_multi_level_lookup_invalid_first_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'test_member.next_component')
示例#7
0
 def test_invalid_python_type(self):
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof(self, 'dontcare')
示例#8
0
 def test_embedded_struct_member2(self):
     offset = offsetof(self.test_struct,
                       'embedded_struct_member.embedded_member2')
     self.assertTrue(offset == 22 * self.ulongsize)
示例#9
0
 def test_anon_union_member1(self):
     offset = offsetof(self.test_struct, 'anon_union_member1')
     self.assertTrue(offset == 13 * self.ulongsize)
示例#10
0
 def test_anon_union_pointer_member2(self):
     offset = offsetof(self.test_struct.pointer(), 'anon_union_member2')
     self.assertTrue(offset == 13*self.ulongsize)
示例#11
0
 def test_anon_union_member1(self):
     offset = offsetof(self.test_struct, 'anon_union_member1')
     self.assertTrue(offset == 13*self.ulongsize)
示例#12
0
 def test_named_struct_pointer_member2(self):
     offset = offsetof(self.test_struct.pointer(), 'named_struct.named_struct_member2')
     self.assertTrue(offset == 8*self.ulongsize)
示例#13
0
 def test_named_struct_member1(self):
     offset = offsetof(self.test_struct, 'named_struct.named_struct_member1')
     self.assertTrue(offset == 7*self.ulongsize)
示例#14
0
 def test_named_struct(self):
     offset = offsetof(self.test_struct, 'named_struct')
     self.assertTrue(offset == 7*self.ulongsize)
示例#15
0
 def test_anon_struct_embedded_struct_list_prev(self):
     offset = offsetof(self.test_struct.pointer(),
                      'anon_struct_embedded_struct.embedded_list.prev')
     self.assertTrue(offset == 6*self.ulongsize)
示例#16
0
 def test_anon_struct_embedded_struct_list_prev(self):
     offset = offsetof(self.test_struct.pointer(),
                       'anon_struct_embedded_struct.embedded_list.prev')
     self.assertTrue(offset == 6 * self.ulongsize)
示例#17
0
 def test_named_struct_member1(self):
     offset = offsetof(self.test_struct,
                       'named_struct.named_struct_member1')
     self.assertTrue(offset == 7 * self.ulongsize)
示例#18
0
 def test_named_union_named_member2(self):
     offset = offsetof(self.test_struct, 'named_union.named_union_member2')
     self.assertTrue(offset == 17*self.ulongsize)
示例#19
0
 def test_named_union_named_member2(self):
     offset = offsetof(self.test_struct, 'named_union.named_union_member2')
     self.assertTrue(offset == 17 * self.ulongsize)
示例#20
0
 def test_named_union_anon_member2(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'named_union_member1')
示例#21
0
 def test_enum_lookup(self):
     offset = offsetof(self.test_struct, 'enum_member')
     self.assertTrue(offset == 26 * self.ulongsize)
示例#22
0
 def test_embedded_struct_member2(self):
     offset = offsetof(self.test_struct,
                       'embedded_struct_member.embedded_member2')
     self.assertTrue(offset == 22*self.ulongsize)
示例#23
0
 def test_multi_level_lookup_missing_first_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'missing.embedded_list.prev')
示例#24
0
 def test_embedded_struct_anon_member2(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'embedded_member2')
示例#25
0
 def test_multi_level_lookup_anon_union_missing_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(
             self.test_struct,
             'anon_union_embedded_struct.invalid.next_component')
示例#26
0
 def test_enum_lookup(self):
     offset = offsetof(self.test_struct, 'enum_member')
     self.assertTrue(offset == 26*self.ulongsize)
示例#27
0
 def test_ulong_by_name(self):
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof('unsigned long', 'test_member')
示例#28
0
 def test_enum_invalid_lookup(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'enum_member.invalid')
示例#29
0
 def test_union_by_value(self):
     t = gdb.lookup_global_symbol('global_union_symbol').value()
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof(t, 'member1')
示例#30
0
 def test_multi_level_lookup_list_prev(self):
     offset = offsetof(self.test_struct,
                       'embedded_struct_member.embedded_list.prev')
     self.assertTrue(offset == 24*self.ulongsize)
示例#31
0
 def test_struct(self):
     offset = offsetof(self.test_struct, 'test_member')
     self.assertTrue(offset == 0)
示例#32
0
 def test_multi_level_lookup_missing_first_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'missing.embedded_list.prev')
示例#33
0
 def test_named_struct(self):
     offset = offsetof(self.test_struct, 'named_struct')
     self.assertTrue(offset == 7 * self.ulongsize)
示例#34
0
 def test_invalid_python_type(self):
     with self.assertRaises(InvalidArgumentError):
         offset = offsetof(self, 'dontcare')
示例#35
0
 def test_named_struct_pointer_member2(self):
     offset = offsetof(self.test_struct.pointer(),
                       'named_struct.named_struct_member2')
     self.assertTrue(offset == 8 * self.ulongsize)
示例#36
0
 def test_multi_level_lookup_missing_last_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct,
                           'embedded_struct_member.embedded_list.invalid')
示例#37
0
 def test_anon_union_pointer_member2(self):
     offset = offsetof(self.test_struct.pointer(), 'anon_union_member2')
     self.assertTrue(offset == 13 * self.ulongsize)
示例#38
0
 def test_multi_level_lookup_invalid_first_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'test_member.next_component')
示例#39
0
 def test_named_union_anon_member2(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'named_union_member1')
示例#40
0
 def test_multi_level_lookup_invalid_middle_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct,
                           'embedded_struct_member.embedded_member1.next_component')
示例#41
0
 def test_embedded_struct_anon_member2(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'embedded_member2')
示例#42
0
 def test_multi_level_lookup_anon_union_missing_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct,
                           'anon_union_embedded_struct.invalid.next_component')
示例#43
0
 def test_enum_invalid_lookup(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'enum_member.invalid')
示例#44
0
 def test_type_by_string_name(self):
     offset = offsetof('struct test', 'test_member')
     self.assertTrue(offset == 0)
示例#45
0
 def test_multi_level_lookup_list_prev(self):
     offset = offsetof(self.test_struct,
                       'embedded_struct_member.embedded_list.prev')
     self.assertTrue(offset == 24 * self.ulongsize)
示例#46
0
 def test_type_by_invalid_name(self):
     with self.assertRaises(InvalidArgumentError):
         offset = offsetof('struct invalid_struct', 'test_member')
示例#47
0
 def test_multi_level_lookup_missing_last_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct,
                           'embedded_struct_member.embedded_list.invalid')
示例#48
0
 def test_invalid_member(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(self.test_struct, 'invalid_member')
示例#49
0
 def test_multi_level_lookup_invalid_middle_component(self):
     with self.assertRaises(InvalidComponentError):
         offset = offsetof(
             self.test_struct,
             'embedded_struct_member.embedded_member1.next_component')
示例#50
0
 def test_struct_by_value(self):
     val = gdb.lookup_global_symbol("global_struct_symbol").value()
     offset = offsetof(val, 'test_member')
     self.assertTrue(offset == 0)
示例#51
0
 def test_type_by_invalid_name(self):
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof('struct invalid_struct', 'test_member')
示例#52
0
 def test_ulong_by_name(self):
     with self.assertRaises(InvalidArgumentTypeError):
         offset = offsetof('unsigned long', 'test_member')
示例#53
0
 def test_struct_by_value(self):
     val = gdb.lookup_global_symbol("global_struct_symbol").value()
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof(val, 'test_member')
示例#54
0
 def test_ulong_by_type_pointer(self):
     t = gdb.lookup_type("unsigned long").pointer()
     with self.assertRaises(InvalidArgumentTypeError):
         offset = offsetof(t, 'test_member')
示例#55
0
 def test_ulong_by_type_pointer(self):
     t = gdb.lookup_type("unsigned long").pointer()
     with self.assertRaises(NotStructOrUnionError):
         offset = offsetof(t, 'test_member')
示例#56
0
 def test_ulong_by_symbol(self):
     t = gdb.lookup_global_symbol('global_ulong_symbol')
     with self.assertRaises(InvalidArgumentTypeError):
         offset = offsetof(t, 'test_member')
示例#57
0
 def test_void_pointer_by_value(self):
     t = gdb.lookup_global_symbol('global_void_pointer_symbol').value()
     with self.assertRaises(ArgumentTypeError):
         offset = offsetof(t, 'test_member')
示例#58
0
 def test_void_pointer_by_value(self):
     t = gdb.lookup_global_symbol('global_void_pointer_symbol').value()
     with self.assertRaises(InvalidArgumentTypeError):
         offset = offsetof(t, 'test_member')
示例#59
0
 def test_struct(self):
     offset = offsetof(self.test_struct, 'test_member')
     self.assertTrue(offset == 0)
示例#60
0
 def test_union_by_value(self):
     t = gdb.lookup_global_symbol('global_union_symbol').value()
     offset = offsetof(t, 'member1')
     self.assertTrue(offset == 0)