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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
# Tests for mixing pseudo-C and normal eBPF instructions
beg:
.text
add %r1,0xaa
r1 += 0xaa
add %r1,%r2
r1 += r2
sub %r1,0xaa
r1 -= 0xaa
sub %r1,%r2
r1 -= r2
mul %r1,0xaa
r1 *= 0xaa
mul %r1,%r2
r1 *= r2
div %r1,0xaa
r1 /= 0xaa
div %r1,%r2
r1 /= r2
or %r1,0xaa
r1 |= 0xaa
or %r1,%r2
r1 |= r2
and %r1,0xaa
r1 &= 0xaa
and %r1,%r2
r1 &= r2
lsh %r1,0xaa
r1 <<= 0xaa
lsh %r1,%r2
r1 <<= r2
rsh %r1,0xaa
r1 >>= 0xaa
rsh %r1,%r2
r1 >>= r2
xor %r1,0xaa
r1 ^= 0xaa
xor %r1,%r2
r1 ^= r2
mov %r1,0xaa
r1 = 0xaa
mov %r1,%r2
r1 = r2
arsh %r1,0xaa
r1 s>>= 0xaa
arsh %r1,%r2
r1 s>>= r2
neg %r1
r1 = -r1
add32 %r1,0xaa
w1 += 0xaa
add32 %r1,%r2
w1 += w2
sub32 %r1,0xaa
w1 -= 0xaa
sub32 %r1,%r2
w1 -= w2
mul32 %r1,0xaa
w1 *= 0xaa
mul32 %r1,%r2
w1 *= w2
div32 %r1,0xaa
w1 /= 0xaa
div32 %r1,%r2
w1 /= w2
or32 %r1,0xaa
w1 |= 0xaa
or32 %r1,%r2
w1 |= w2
and32 %r1,0xaa
w1 &= 0xaa
and32 %r1,%r2
w1 &= w2
lsh32 %r1,0xaa
w1 <<= 0xaa
lsh32 %r1,%r2
w1 <<= w2
rsh32 %r1,0xaa
w1 >>= 0xaa
rsh32 %r1,%r2
w1 >>= w2
xor32 %r1,0xaa
w1 ^= 0xaa
xor32 %r1,%r2
w1 ^= w2
mov32 %r1,0xaa
w1 = 0xaa
mov32 %r1,%r2
w1 = w2
arsh32 %r1,0xaa
w1 s>>= 0xaa
arsh32 %r1,%r2
w1 s>>= w2
neg32 %r1
w1 = -w1
endle %r1,16
r1 = le16 r1
endle %r1,32
r1 = le32 r1
endle %r1,64
r1 = le64 r1
endbe %r1,16
r1 = be16 r1
endbe %r1,32
r1 = be32 r1
endbe %r1,64
r1 = be64 r1
ldxb %r1,[%r2+0xaa]
r1 = *(u8 *)(r2 + 0xaa)
ldxh %r1,[%r2+0xaa]
r1 = *(u16 *)(r2 + 0xaa)
ldxw %r1,[%r2+0xaa]
r1 = *(u32 *)(r2 + 0xaa)
ldxdw %r1,[%r2+0xaa]
r1 = *(u64 *)(r2 + 0xaa)
stxb [%r1+0xaa],%r2
*(u8 *)(r1 + 0xaa) = r2
stxh [%r1+0xaa],%r2
*(u16 *)(r1 + 0xaa) = r2
stxw [%r1+0xaa],%r2
*(u32 *)(r1 + 0xaa) = r2
stxdw [%r1+0xaa],%r2
*(u64 *)(r1 + 0xaa) = r2
ja 187
goto 0xbb
jeq %r1,0xaa,187
if r1 == 0xaa goto 0xbb
jeq %r1,%r2,187
if r1 == r2 goto 0xbb
jgt %r1,0xaa,187
if r1 > 0xaa goto 0xbb
jgt %r1,%r2,187
if r1 > r2 goto 0xbb
jge %r1,0xaa,187
if r1 >= 0xaa goto 0xbb
jge %r1,%r2,187
if r1 >= r2 goto 0xbb
jlt %r1,0xaa,187
if r1 < 0xaa goto 0xbb
jlt %r1,%r2,187
if r1 < r2 goto 0xbb
jle %r1,0xaa,187
if r1 <= 0xaa goto 0xbb
jle %r1,%r2,187
if r1 <= r2 goto 0xbb
jset %r1,0xaa,187
if r1 & 0xaa goto 0xbb
jset %r1,%r2,187
if r1 & r2 goto 0xbb
jne %r1,0xaa,187
if r1 != 0xaa goto 0xbb
jne %r1,%r2,187
if r1 != r2 goto 0xbb
jsgt %r1,0xaa,187
if r1 s> 0xaa goto 0xbb
jsgt %r1,%r2,187
if r1 s> r2 goto 0xbb
jsge %r1,0xaa,187
if r1 s>= 0xaa goto 0xbb
jsge %r1,%r2,187
if r1 s>= r2 goto 0xbb
jslt %r1,0xaa,187
if r1 s< 0xaa goto 0xbb
jslt %r1,%r2,187
if r1 s< r2 goto 0xbb
jsle %r1,0xaa,187
if r1 s<= 0xaa goto 0xbb
jsle %r1,%r2,187
if r1 s<= r2 goto 0xbb
call 170
call 0xaa
exit
exit
mov %r6,main - beg
exit
ldabsw 0xaa
r0 = *(u32 *)skb[0xaa]
ldindb %r7,0xaa
r0 = *(u8 *)skb[r7 + 0xaa]
ldabsw 0xaa
r0 = *(u32 *)skb[0xaa]
ldindb %r7,0xaa
r0 = *(u8 *)skb[r7 + 0xaa]
lddw %r3,1
r3 = 1 ll
lddw %r4,0xaabbccddeeff7788
r4 = 0xaabbccddeeff7788 ll
r5 = 0x1122334455667788 ll
lddw %r5,0x1122334455667788
lddw %r6,main
r6 = main ll
main:
lock *(u32 *)(r1 + 0xaa) += r2
xaddw [%r1+0xaa],%r2
lock *(u64 *)(r1 + 0xaa) += r2
xadddw [%r1+0xaa],%r2
|