1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
from miasm2.core.objc import CLeafTypes, ObjCDecl, PADDING_TYPE_NAME
from miasm2.core.ctypesmngr import CTypeId, CTypePtr
class CTypeAMD64_unk(CLeafTypes):
"""Define C types sizes/alignment for x86_64 architecture"""
obj_pad = ObjCDecl(PADDING_TYPE_NAME, 1, 1) # __padding__ is size 1/align 1
obj_char = ObjCDecl("char", 1, 1)
obj_short = ObjCDecl("short", 2, 2)
obj_int = ObjCDecl("int", 4, 4)
obj_long = ObjCDecl("long", 8, 8)
obj_uchar = ObjCDecl("uchar", 1, 1)
obj_ushort = ObjCDecl("ushort", 2, 2)
obj_uint = ObjCDecl("uint", 4, 4)
obj_ulong = ObjCDecl("ulong", 8, 8)
obj_void = ObjCDecl("void", 1, 1)
obj_enum = ObjCDecl("enum", 4, 4)
obj_float = ObjCDecl("float", 4, 4)
obj_double = ObjCDecl("double", 8, 8)
obj_ldouble = ObjCDecl("ldouble", 16, 16)
def __init__(self):
self.types = {
CTypeId(PADDING_TYPE_NAME): self.obj_pad,
CTypeId('char'): self.obj_char,
CTypeId('short'): self.obj_short,
CTypeId('int'): self.obj_int,
CTypeId('void'): self.obj_void,
CTypeId('long',): self.obj_long,
CTypeId('float'): self.obj_float,
CTypeId('double'): self.obj_double,
CTypeId('signed', 'char'): self.obj_char,
CTypeId('unsigned', 'char'): self.obj_uchar,
CTypeId('short', 'int'): self.obj_short,
CTypeId('signed', 'short'): self.obj_short,
CTypeId('signed', 'short', 'int'): self.obj_short,
CTypeId('unsigned', 'short'): self.obj_ushort,
CTypeId('unsigned', 'short', 'int'): self.obj_ushort,
CTypeId('unsigned', ): self.obj_uint,
CTypeId('unsigned', 'int'): self.obj_uint,
CTypeId('signed', 'int'): self.obj_int,
CTypeId('long', 'int'): self.obj_long,
CTypeId('long', 'long'): self.obj_long,
CTypeId('long', 'long', 'int'): self.obj_long,
CTypeId('signed', 'long', 'long'): self.obj_long,
CTypeId('unsigned', 'long', 'long'): self.obj_ulong,
CTypeId('signed', 'long', 'long', 'int'): self.obj_long,
CTypeId('unsigned', 'long', 'long', 'int'): self.obj_ulong,
CTypeId('signed', 'long'): self.obj_long,
CTypeId('unsigned', 'long'): self.obj_ulong,
CTypeId('signed', 'long', 'int'): self.obj_long,
CTypeId('unsigned', 'long', 'int'): self.obj_ulong,
CTypeId('long', 'double'): self.obj_ldouble,
CTypePtr(CTypeId('void')): self.obj_ulong,
}
class CTypeX86_unk(CLeafTypes):
"""Define C types sizes/alignment for x86_32 architecture"""
obj_pad = ObjCDecl(PADDING_TYPE_NAME, 1, 1) # __padding__ is size 1/align 1
obj_char = ObjCDecl("char", 1, 1)
obj_short = ObjCDecl("short", 2, 2)
obj_int = ObjCDecl("int", 4, 4)
obj_long = ObjCDecl("long", 4, 4)
obj_uchar = ObjCDecl("uchar", 1, 1)
obj_ushort = ObjCDecl("ushort", 2, 2)
obj_uint = ObjCDecl("uint", 4, 4)
obj_ulong = ObjCDecl("ulong", 4, 4)
obj_void = ObjCDecl("void", 1, 1)
obj_enum = ObjCDecl("enum", 4, 4)
obj_float = ObjCDecl("float", 4, 4)
obj_double = ObjCDecl("double", 8, 8)
obj_ldouble = ObjCDecl("ldouble", 16, 16)
def __init__(self):
self.types = {
CTypeId(PADDING_TYPE_NAME): self.obj_pad,
CTypeId('char'): self.obj_char,
CTypeId('short'): self.obj_short,
CTypeId('int'): self.obj_int,
CTypeId('void'): self.obj_void,
CTypeId('long',): self.obj_long,
CTypeId('float'): self.obj_float,
CTypeId('double'): self.obj_double,
CTypeId('signed', 'char'): self.obj_char,
CTypeId('unsigned', 'char'): self.obj_uchar,
CTypeId('short', 'int'): self.obj_short,
CTypeId('signed', 'short'): self.obj_short,
CTypeId('signed', 'short', 'int'): self.obj_short,
CTypeId('unsigned', 'short'): self.obj_ushort,
CTypeId('unsigned', 'short', 'int'): self.obj_ushort,
CTypeId('unsigned', ): self.obj_uint,
CTypeId('unsigned', 'int'): self.obj_uint,
CTypeId('signed', 'int'): self.obj_int,
CTypeId('long', 'int'): self.obj_long,
CTypeId('long', 'long'): self.obj_long,
CTypeId('long', 'long', 'int'): self.obj_long,
CTypeId('signed', 'long', 'long'): self.obj_long,
CTypeId('unsigned', 'long', 'long'): self.obj_ulong,
CTypeId('signed', 'long', 'long', 'int'): self.obj_long,
CTypeId('unsigned', 'long', 'long', 'int'): self.obj_ulong,
CTypeId('signed', 'long'): self.obj_long,
CTypeId('unsigned', 'long'): self.obj_ulong,
CTypeId('signed', 'long', 'int'): self.obj_long,
CTypeId('unsigned', 'long', 'int'): self.obj_ulong,
CTypeId('long', 'double'): self.obj_ldouble,
CTypePtr(CTypeId('void')): self.obj_uint,
}
|