forked from copy/v86
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgdb-extract-def
157 lines (142 loc) · 4.46 KB
/
gdb-extract-def
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# Invocation: gdb -x gdb-extract-def
# extract-state /path/to/foo.bin /path/to/foo.fixture
define extract-state
file $arg0
set $STACK_TOP=0x120000
# Disables logging to stdout - only log to file
set logging redirect on
set logging file $arg1
set logging overwrite on
set logging on
run
printf "---BEGIN JSON---\n"
printf "[\n"
printf " %d,\n", $eax
printf " %d,\n", $ecx
printf " %d,\n", $edx
printf " %d,\n", $ebx
printf " %d,\n", $esp
printf " %d,\n", $ebp
printf " %d,\n", $esi
printf " %d,\n", $edi
printf " \n"
printf " %d,\n", $eip
printf " \n"
# For fpu registers, check the tag register first. If the tag index is
# invalid and you try to access to corresponding register, gdb exits with an
# error.
if ($ftag & (3 << 0)) != (2 << 0)
printf " %.100e,\n", $st0
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 2)) != (2 << 2)
printf " %.100e,\n", $st1
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 4)) != (2 << 4)
printf " %.100e,\n", $st2
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 6)) != (2 << 6)
printf " %.100e,\n", $st3
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 8)) != (2 << 8)
printf " %.100e,\n", $st4
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 10)) != (2 << 10)
printf " %.100e,\n", $st5
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 12)) != (2 << 12)
printf " %.100e,\n", $st6
else
printf " \"invalid\",\n"
end
if ($ftag & (3 << 14)) != (2 << 14)
printf " %.100e,\n", $st7
else
printf " \"invalid\",\n"
end
printf " \n"
printf " %d,\n", $mm0.v2_int32[0]
printf " %d,\n", $mm0.v2_int32[1]
printf " %d,\n", $mm1.v2_int32[0]
printf " %d,\n", $mm1.v2_int32[1]
printf " %d,\n", $mm2.v2_int32[0]
printf " %d,\n", $mm2.v2_int32[1]
printf " %d,\n", $mm3.v2_int32[0]
printf " %d,\n", $mm3.v2_int32[1]
printf " %d,\n", $mm4.v2_int32[0]
printf " %d,\n", $mm4.v2_int32[1]
printf " %d,\n", $mm5.v2_int32[0]
printf " %d,\n", $mm5.v2_int32[1]
printf " %d,\n", $mm6.v2_int32[0]
printf " %d,\n", $mm6.v2_int32[1]
printf " %d,\n", $mm7.v2_int32[0]
printf " %d,\n", $mm7.v2_int32[1]
printf " \n"
printf " %d,\n", $xmm0.v4_int32[0]
printf " %d,\n", $xmm0.v4_int32[1]
printf " %d,\n", $xmm0.v4_int32[2]
printf " %d,\n", $xmm0.v4_int32[3]
printf " %d,\n", $xmm1.v4_int32[0]
printf " %d,\n", $xmm1.v4_int32[1]
printf " %d,\n", $xmm1.v4_int32[2]
printf " %d,\n", $xmm1.v4_int32[3]
printf " %d,\n", $xmm2.v4_int32[0]
printf " %d,\n", $xmm2.v4_int32[1]
printf " %d,\n", $xmm2.v4_int32[2]
printf " %d,\n", $xmm2.v4_int32[3]
printf " %d,\n", $xmm3.v4_int32[0]
printf " %d,\n", $xmm3.v4_int32[1]
printf " %d,\n", $xmm3.v4_int32[2]
printf " %d,\n", $xmm3.v4_int32[3]
printf " %d,\n", $xmm4.v4_int32[0]
printf " %d,\n", $xmm4.v4_int32[1]
printf " %d,\n", $xmm4.v4_int32[2]
printf " %d,\n", $xmm4.v4_int32[3]
printf " %d,\n", $xmm5.v4_int32[0]
printf " %d,\n", $xmm5.v4_int32[1]
printf " %d,\n", $xmm5.v4_int32[2]
printf " %d,\n", $xmm5.v4_int32[3]
printf " %d,\n", $xmm6.v4_int32[0]
printf " %d,\n", $xmm6.v4_int32[1]
printf " %d,\n", $xmm6.v4_int32[2]
printf " %d,\n", $xmm6.v4_int32[3]
printf " %d,\n", $xmm7.v4_int32[0]
printf " %d,\n", $xmm7.v4_int32[1]
printf " %d,\n", $xmm7.v4_int32[2]
printf " %d,\n", $xmm7.v4_int32[3]
printf " \n"
printf " %d,\n", *(int*)($STACK_TOP-64)
printf " %d,\n", *(int*)($STACK_TOP-60)
printf " %d,\n", *(int*)($STACK_TOP-56)
printf " %d,\n", *(int*)($STACK_TOP-52)
printf " %d,\n", *(int*)($STACK_TOP-48)
printf " %d,\n", *(int*)($STACK_TOP-44)
printf " %d,\n", *(int*)($STACK_TOP-40)
printf " %d,\n", *(int*)($STACK_TOP-36)
printf " %d,\n", *(int*)($STACK_TOP-32)
printf " %d,\n", *(int*)($STACK_TOP-28)
printf " %d,\n", *(int*)($STACK_TOP-24)
printf " %d,\n", *(int*)($STACK_TOP-20)
printf " %d,\n", *(int*)($STACK_TOP-16)
printf " %d,\n", *(int*)($STACK_TOP-12)
printf " %d,\n", *(int*)($STACK_TOP-8)
printf " %d,\n", *(int*)($STACK_TOP-4)
printf " \n"
printf " %d,\n", $eflags
printf " %d,\n", $ftag
printf " %d\n", $fstat
printf "]\n"
printf "---END JSON---\n"
set logging off
end