OLD | NEW |
1 OPTION» DOTNAME | 1 default»rel |
2 .text$» SEGMENT ALIGN(256) 'CODE' | 2 %define XMMWORD |
3 EXTERN» OPENSSL_ia32cap_P:NEAR | 3 %define YMMWORD |
| 4 %define ZMMWORD |
| 5 section».text code align=64 |
4 | 6 |
5 PUBLIC» asm_RC4 | 7 EXTERN» OPENSSL_ia32cap_P |
| 8 |
| 9 global» asm_RC4 |
6 | 10 |
7 ALIGN 16 | 11 ALIGN 16 |
8 asm_RC4»PROC PUBLIC | 12 asm_RC4: |
9 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue | 13 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue |
10 » mov» QWORD PTR[16+rsp],rsi | 14 » mov» QWORD[16+rsp],rsi |
11 mov rax,rsp | 15 mov rax,rsp |
12 $L$SEH_begin_asm_RC4:: | 16 $L$SEH_begin_asm_RC4: |
13 mov rdi,rcx | 17 mov rdi,rcx |
14 mov rsi,rdx | 18 mov rsi,rdx |
15 mov rdx,r8 | 19 mov rdx,r8 |
16 mov rcx,r9 | 20 mov rcx,r9 |
17 | 21 |
18 | 22 |
19 or rsi,rsi | 23 or rsi,rsi |
20 » jne» $L$entry | 24 » jne» NEAR $L$entry |
21 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue | 25 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue |
22 » mov» rsi,QWORD PTR[16+rsp] | 26 » mov» rsi,QWORD[16+rsp] |
23 DB 0F3h,0C3h ;repret | 27 DB 0F3h,0C3h ;repret |
24 $L$entry:: | 28 $L$entry: |
25 push rbx | 29 push rbx |
26 push r12 | 30 push r12 |
27 push r13 | 31 push r13 |
28 $L$prologue:: | 32 $L$prologue: |
29 mov r11,rsi | 33 mov r11,rsi |
30 mov r12,rdx | 34 mov r12,rdx |
31 mov r13,rcx | 35 mov r13,rcx |
32 xor r10,r10 | 36 xor r10,r10 |
33 xor rcx,rcx | 37 xor rcx,rcx |
34 | 38 |
35 » lea» rdi,QWORD PTR[8+rdi] | 39 » lea» rdi,[8+rdi] |
36 » mov» r10b,BYTE PTR[((-8))+rdi] | 40 » mov» r10b,BYTE[((-8))+rdi] |
37 » mov» cl,BYTE PTR[((-4))+rdi] | 41 » mov» cl,BYTE[((-4))+rdi] |
38 » cmp» DWORD PTR[256+rdi],-1 | 42 » cmp» DWORD[256+rdi],-1 |
39 » je» $L$RC4_CHAR | 43 » je» NEAR $L$RC4_CHAR |
40 » mov» r8d,DWORD PTR[OPENSSL_ia32cap_P] | 44 » mov» r8d,DWORD[OPENSSL_ia32cap_P] |
41 xor rbx,rbx | 45 xor rbx,rbx |
42 inc r10b | 46 inc r10b |
43 sub rbx,r10 | 47 sub rbx,r10 |
44 sub r13,r12 | 48 sub r13,r12 |
45 » mov» eax,DWORD PTR[r10*4+rdi] | 49 » mov» eax,DWORD[r10*4+rdi] |
46 test r11,-16 | 50 test r11,-16 |
47 » jz» $L$loop1 | 51 » jz» NEAR $L$loop1 |
48 bt r8d,30 | 52 bt r8d,30 |
49 » jc» $L$intel | 53 » jc» NEAR $L$intel |
50 and rbx,7 | 54 and rbx,7 |
51 » lea» rsi,QWORD PTR[1+r10] | 55 » lea» rsi,[1+r10] |
52 » jz» $L$oop8 | 56 » jz» NEAR $L$oop8 |
53 sub r11,rbx | 57 sub r11,rbx |
54 $L$oop8_warmup:: | 58 $L$oop8_warmup: |
55 » add» cl,al | 59 » add» cl,al |
56 » mov» edx,DWORD PTR[rcx*4+rdi] | 60 » mov» edx,DWORD[rcx*4+rdi] |
57 » mov» DWORD PTR[rcx*4+rdi],eax | 61 » mov» DWORD[rcx*4+rdi],eax |
58 » mov» DWORD PTR[r10*4+rdi],edx | 62 » mov» DWORD[r10*4+rdi],edx |
59 add al,dl | 63 add al,dl |
60 inc r10b | 64 inc r10b |
61 » mov» edx,DWORD PTR[rax*4+rdi] | 65 » mov» edx,DWORD[rax*4+rdi] |
62 » mov» eax,DWORD PTR[r10*4+rdi] | 66 » mov» eax,DWORD[r10*4+rdi] |
63 » xor» dl,BYTE PTR[r12] | 67 » xor» dl,BYTE[r12] |
64 » mov» BYTE PTR[r13*1+r12],dl | 68 » mov» BYTE[r13*1+r12],dl |
65 » lea» r12,QWORD PTR[1+r12] | 69 » lea» r12,[1+r12] |
66 dec rbx | 70 dec rbx |
67 » jnz» $L$oop8_warmup | 71 » jnz» NEAR $L$oop8_warmup |
68 | 72 |
69 » lea» rsi,QWORD PTR[1+r10] | 73 » lea» rsi,[1+r10] |
70 » jmp» $L$oop8 | 74 » jmp» NEAR $L$oop8 |
71 ALIGN» 16 | 75 ALIGN» 16 |
72 $L$oop8:: | 76 $L$oop8: |
73 » add» cl,al | 77 » add» cl,al |
74 » mov» edx,DWORD PTR[rcx*4+rdi] | 78 » mov» edx,DWORD[rcx*4+rdi] |
75 » mov» DWORD PTR[rcx*4+rdi],eax | 79 » mov» DWORD[rcx*4+rdi],eax |
76 » mov» ebx,DWORD PTR[rsi*4+rdi] | 80 » mov» ebx,DWORD[rsi*4+rdi] |
77 » ror» r8,8 | 81 » ror» r8,8 |
78 » mov» DWORD PTR[r10*4+rdi],edx | 82 » mov» DWORD[r10*4+rdi],edx |
79 » add» dl,al | 83 » add» dl,al |
80 » mov» r8b,BYTE PTR[rdx*4+rdi] | 84 » mov» r8b,BYTE[rdx*4+rdi] |
81 » add» cl,bl | 85 » add» cl,bl |
82 » mov» edx,DWORD PTR[rcx*4+rdi] | 86 » mov» edx,DWORD[rcx*4+rdi] |
83 » mov» DWORD PTR[rcx*4+rdi],ebx | 87 » mov» DWORD[rcx*4+rdi],ebx |
84 » mov» eax,DWORD PTR[4+rsi*4+rdi] | 88 » mov» eax,DWORD[4+rsi*4+rdi] |
85 » ror» r8,8 | 89 » ror» r8,8 |
86 » mov» DWORD PTR[4+r10*4+rdi],edx | 90 » mov» DWORD[4+r10*4+rdi],edx |
87 » add» dl,bl | 91 » add» dl,bl |
88 » mov» r8b,BYTE PTR[rdx*4+rdi] | 92 » mov» r8b,BYTE[rdx*4+rdi] |
89 » add» cl,al | 93 » add» cl,al |
90 » mov» edx,DWORD PTR[rcx*4+rdi] | 94 » mov» edx,DWORD[rcx*4+rdi] |
91 » mov» DWORD PTR[rcx*4+rdi],eax | 95 » mov» DWORD[rcx*4+rdi],eax |
92 » mov» ebx,DWORD PTR[8+rsi*4+rdi] | 96 » mov» ebx,DWORD[8+rsi*4+rdi] |
93 » ror» r8,8 | 97 » ror» r8,8 |
94 » mov» DWORD PTR[8+r10*4+rdi],edx | 98 » mov» DWORD[8+r10*4+rdi],edx |
95 » add» dl,al | 99 » add» dl,al |
96 » mov» r8b,BYTE PTR[rdx*4+rdi] | 100 » mov» r8b,BYTE[rdx*4+rdi] |
97 » add» cl,bl | 101 » add» cl,bl |
98 » mov» edx,DWORD PTR[rcx*4+rdi] | 102 » mov» edx,DWORD[rcx*4+rdi] |
99 » mov» DWORD PTR[rcx*4+rdi],ebx | 103 » mov» DWORD[rcx*4+rdi],ebx |
100 » mov» eax,DWORD PTR[12+rsi*4+rdi] | 104 » mov» eax,DWORD[12+rsi*4+rdi] |
101 » ror» r8,8 | 105 » ror» r8,8 |
102 » mov» DWORD PTR[12+r10*4+rdi],edx | 106 » mov» DWORD[12+r10*4+rdi],edx |
103 » add» dl,bl | 107 » add» dl,bl |
104 » mov» r8b,BYTE PTR[rdx*4+rdi] | 108 » mov» r8b,BYTE[rdx*4+rdi] |
105 » add» cl,al | 109 » add» cl,al |
106 » mov» edx,DWORD PTR[rcx*4+rdi] | 110 » mov» edx,DWORD[rcx*4+rdi] |
107 » mov» DWORD PTR[rcx*4+rdi],eax | 111 » mov» DWORD[rcx*4+rdi],eax |
108 » mov» ebx,DWORD PTR[16+rsi*4+rdi] | 112 » mov» ebx,DWORD[16+rsi*4+rdi] |
109 » ror» r8,8 | 113 » ror» r8,8 |
110 » mov» DWORD PTR[16+r10*4+rdi],edx | 114 » mov» DWORD[16+r10*4+rdi],edx |
111 » add» dl,al | 115 » add» dl,al |
112 » mov» r8b,BYTE PTR[rdx*4+rdi] | 116 » mov» r8b,BYTE[rdx*4+rdi] |
113 » add» cl,bl | 117 » add» cl,bl |
114 » mov» edx,DWORD PTR[rcx*4+rdi] | 118 » mov» edx,DWORD[rcx*4+rdi] |
115 » mov» DWORD PTR[rcx*4+rdi],ebx | 119 » mov» DWORD[rcx*4+rdi],ebx |
116 » mov» eax,DWORD PTR[20+rsi*4+rdi] | 120 » mov» eax,DWORD[20+rsi*4+rdi] |
117 » ror» r8,8 | 121 » ror» r8,8 |
118 » mov» DWORD PTR[20+r10*4+rdi],edx | 122 » mov» DWORD[20+r10*4+rdi],edx |
119 » add» dl,bl | 123 » add» dl,bl |
120 » mov» r8b,BYTE PTR[rdx*4+rdi] | 124 » mov» r8b,BYTE[rdx*4+rdi] |
121 » add» cl,al | 125 » add» cl,al |
122 » mov» edx,DWORD PTR[rcx*4+rdi] | 126 » mov» edx,DWORD[rcx*4+rdi] |
123 » mov» DWORD PTR[rcx*4+rdi],eax | 127 » mov» DWORD[rcx*4+rdi],eax |
124 » mov» ebx,DWORD PTR[24+rsi*4+rdi] | 128 » mov» ebx,DWORD[24+rsi*4+rdi] |
125 » ror» r8,8 | 129 » ror» r8,8 |
126 » mov» DWORD PTR[24+r10*4+rdi],edx | 130 » mov» DWORD[24+r10*4+rdi],edx |
127 » add» dl,al | 131 » add» dl,al |
128 » mov» r8b,BYTE PTR[rdx*4+rdi] | 132 » mov» r8b,BYTE[rdx*4+rdi] |
129 add sil,8 | 133 add sil,8 |
130 add cl,bl | 134 add cl,bl |
131 » mov» edx,DWORD PTR[rcx*4+rdi] | 135 » mov» edx,DWORD[rcx*4+rdi] |
132 » mov» DWORD PTR[rcx*4+rdi],ebx | 136 » mov» DWORD[rcx*4+rdi],ebx |
133 » mov» eax,DWORD PTR[((-4))+rsi*4+rdi] | 137 » mov» eax,DWORD[((-4))+rsi*4+rdi] |
134 » ror» r8,8 | 138 » ror» r8,8 |
135 » mov» DWORD PTR[28+r10*4+rdi],edx | 139 » mov» DWORD[28+r10*4+rdi],edx |
136 » add» dl,bl | 140 » add» dl,bl |
137 » mov» r8b,BYTE PTR[rdx*4+rdi] | 141 » mov» r8b,BYTE[rdx*4+rdi] |
138 add r10b,8 | 142 add r10b,8 |
139 ror r8,8 | 143 ror r8,8 |
140 sub r11,8 | 144 sub r11,8 |
141 | 145 |
142 » xor» r8,QWORD PTR[r12] | 146 » xor» r8,QWORD[r12] |
143 » mov» QWORD PTR[r13*1+r12],r8 | 147 » mov» QWORD[r13*1+r12],r8 |
144 » lea» r12,QWORD PTR[8+r12] | 148 » lea» r12,[8+r12] |
145 | 149 |
146 test r11,-8 | 150 test r11,-8 |
147 » jnz» $L$oop8 | 151 » jnz» NEAR $L$oop8 |
148 cmp r11,0 | 152 cmp r11,0 |
149 » jne» $L$loop1 | 153 » jne» NEAR $L$loop1 |
150 » jmp» $L$exit | 154 » jmp» NEAR $L$exit |
151 | 155 |
152 ALIGN» 16 | 156 ALIGN» 16 |
153 $L$intel:: | 157 $L$intel: |
154 test r11,-32 | 158 test r11,-32 |
155 » jz» $L$loop1 | 159 » jz» NEAR $L$loop1 |
156 and rbx,15 | 160 and rbx,15 |
157 » jz» $L$oop16_is_hot | 161 » jz» NEAR $L$oop16_is_hot |
158 sub r11,rbx | 162 sub r11,rbx |
159 $L$oop16_warmup:: | 163 $L$oop16_warmup: |
160 » add» cl,al | 164 » add» cl,al |
161 » mov» edx,DWORD PTR[rcx*4+rdi] | 165 » mov» edx,DWORD[rcx*4+rdi] |
162 » mov» DWORD PTR[rcx*4+rdi],eax | 166 » mov» DWORD[rcx*4+rdi],eax |
163 » mov» DWORD PTR[r10*4+rdi],edx | 167 » mov» DWORD[r10*4+rdi],edx |
164 add al,dl | 168 add al,dl |
165 inc r10b | 169 inc r10b |
166 » mov» edx,DWORD PTR[rax*4+rdi] | 170 » mov» edx,DWORD[rax*4+rdi] |
167 » mov» eax,DWORD PTR[r10*4+rdi] | 171 » mov» eax,DWORD[r10*4+rdi] |
168 » xor» dl,BYTE PTR[r12] | 172 » xor» dl,BYTE[r12] |
169 » mov» BYTE PTR[r13*1+r12],dl | 173 » mov» BYTE[r13*1+r12],dl |
170 » lea» r12,QWORD PTR[1+r12] | 174 » lea» r12,[1+r12] |
171 dec rbx | 175 dec rbx |
172 » jnz» $L$oop16_warmup | 176 » jnz» NEAR $L$oop16_warmup |
173 | 177 |
174 mov rbx,rcx | 178 mov rbx,rcx |
175 xor rcx,rcx | 179 xor rcx,rcx |
176 mov cl,bl | 180 mov cl,bl |
177 | 181 |
178 $L$oop16_is_hot:: | 182 $L$oop16_is_hot: |
179 » lea» rsi,QWORD PTR[r10*4+rdi] | 183 » lea» rsi,[r10*4+rdi] |
180 » add» cl,al | 184 » add» cl,al |
181 » mov» edx,DWORD PTR[rcx*4+rdi] | 185 » mov» edx,DWORD[rcx*4+rdi] |
182 pxor xmm0,xmm0 | 186 pxor xmm0,xmm0 |
183 » mov» DWORD PTR[rcx*4+rdi],eax | 187 » mov» DWORD[rcx*4+rdi],eax |
184 » add» al,dl | 188 » add» al,dl |
185 » mov» ebx,DWORD PTR[4+rsi] | 189 » mov» ebx,DWORD[4+rsi] |
186 » movzx» eax,al | 190 » movzx» eax,al |
187 » mov» DWORD PTR[rsi],edx | 191 » mov» DWORD[rsi],edx |
188 » add» cl,bl | 192 » add» cl,bl |
189 » pinsrw» xmm0,WORD PTR[rax*4+rdi],0 | 193 » pinsrw» xmm0,WORD[rax*4+rdi],0 |
190 » jmp» $L$oop16_enter | 194 » jmp» NEAR $L$oop16_enter |
191 ALIGN» 16 | 195 ALIGN» 16 |
192 $L$oop16:: | 196 $L$oop16: |
193 » add» cl,al | 197 » add» cl,al |
194 » mov» edx,DWORD PTR[rcx*4+rdi] | 198 » mov» edx,DWORD[rcx*4+rdi] |
195 pxor xmm2,xmm0 | 199 pxor xmm2,xmm0 |
196 psllq xmm1,8 | 200 psllq xmm1,8 |
197 pxor xmm0,xmm0 | 201 pxor xmm0,xmm0 |
198 » mov» DWORD PTR[rcx*4+rdi],eax | 202 » mov» DWORD[rcx*4+rdi],eax |
199 » add» al,dl | 203 » add» al,dl |
200 » mov» ebx,DWORD PTR[4+rsi] | 204 » mov» ebx,DWORD[4+rsi] |
201 » movzx» eax,al | 205 » movzx» eax,al |
202 » mov» DWORD PTR[rsi],edx | 206 » mov» DWORD[rsi],edx |
203 pxor xmm2,xmm1 | 207 pxor xmm2,xmm1 |
204 add cl,bl | 208 add cl,bl |
205 » pinsrw» xmm0,WORD PTR[rax*4+rdi],0 | 209 » pinsrw» xmm0,WORD[rax*4+rdi],0 |
206 » movdqu» XMMWORD PTR[r13*1+r12],xmm2 | 210 » movdqu» XMMWORD[r13*1+r12],xmm2 |
207 » lea» r12,QWORD PTR[16+r12] | 211 » lea» r12,[16+r12] |
208 $L$oop16_enter:: | 212 $L$oop16_enter: |
209 » mov» edx,DWORD PTR[rcx*4+rdi] | 213 » mov» edx,DWORD[rcx*4+rdi] |
210 pxor xmm1,xmm1 | 214 pxor xmm1,xmm1 |
211 » mov» DWORD PTR[rcx*4+rdi],ebx | 215 » mov» DWORD[rcx*4+rdi],ebx |
212 » add» bl,dl | 216 » add» bl,dl |
213 » mov» eax,DWORD PTR[8+rsi] | 217 » mov» eax,DWORD[8+rsi] |
214 » movzx» ebx,bl | 218 » movzx» ebx,bl |
215 » mov» DWORD PTR[4+rsi],edx | 219 » mov» DWORD[4+rsi],edx |
216 » add» cl,al | 220 » add» cl,al |
217 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],0 | 221 » pinsrw» xmm1,WORD[rbx*4+rdi],0 |
218 » mov» edx,DWORD PTR[rcx*4+rdi] | 222 » mov» edx,DWORD[rcx*4+rdi] |
219 » mov» DWORD PTR[rcx*4+rdi],eax | 223 » mov» DWORD[rcx*4+rdi],eax |
220 » add» al,dl | 224 » add» al,dl |
221 » mov» ebx,DWORD PTR[12+rsi] | 225 » mov» ebx,DWORD[12+rsi] |
222 » movzx» eax,al | 226 » movzx» eax,al |
223 » mov» DWORD PTR[8+rsi],edx | 227 » mov» DWORD[8+rsi],edx |
224 » add» cl,bl | 228 » add» cl,bl |
225 » pinsrw» xmm0,WORD PTR[rax*4+rdi],1 | 229 » pinsrw» xmm0,WORD[rax*4+rdi],1 |
226 » mov» edx,DWORD PTR[rcx*4+rdi] | 230 » mov» edx,DWORD[rcx*4+rdi] |
227 » mov» DWORD PTR[rcx*4+rdi],ebx | 231 » mov» DWORD[rcx*4+rdi],ebx |
228 » add» bl,dl | 232 » add» bl,dl |
229 » mov» eax,DWORD PTR[16+rsi] | 233 » mov» eax,DWORD[16+rsi] |
230 » movzx» ebx,bl | 234 » movzx» ebx,bl |
231 » mov» DWORD PTR[12+rsi],edx | 235 » mov» DWORD[12+rsi],edx |
232 » add» cl,al | 236 » add» cl,al |
233 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],1 | 237 » pinsrw» xmm1,WORD[rbx*4+rdi],1 |
234 » mov» edx,DWORD PTR[rcx*4+rdi] | 238 » mov» edx,DWORD[rcx*4+rdi] |
235 » mov» DWORD PTR[rcx*4+rdi],eax | 239 » mov» DWORD[rcx*4+rdi],eax |
236 » add» al,dl | 240 » add» al,dl |
237 » mov» ebx,DWORD PTR[20+rsi] | 241 » mov» ebx,DWORD[20+rsi] |
238 » movzx» eax,al | 242 » movzx» eax,al |
239 » mov» DWORD PTR[16+rsi],edx | 243 » mov» DWORD[16+rsi],edx |
240 » add» cl,bl | 244 » add» cl,bl |
241 » pinsrw» xmm0,WORD PTR[rax*4+rdi],2 | 245 » pinsrw» xmm0,WORD[rax*4+rdi],2 |
242 » mov» edx,DWORD PTR[rcx*4+rdi] | 246 » mov» edx,DWORD[rcx*4+rdi] |
243 » mov» DWORD PTR[rcx*4+rdi],ebx | 247 » mov» DWORD[rcx*4+rdi],ebx |
244 » add» bl,dl | 248 » add» bl,dl |
245 » mov» eax,DWORD PTR[24+rsi] | 249 » mov» eax,DWORD[24+rsi] |
246 » movzx» ebx,bl | 250 » movzx» ebx,bl |
247 » mov» DWORD PTR[20+rsi],edx | 251 » mov» DWORD[20+rsi],edx |
248 » add» cl,al | 252 » add» cl,al |
249 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],2 | 253 » pinsrw» xmm1,WORD[rbx*4+rdi],2 |
250 » mov» edx,DWORD PTR[rcx*4+rdi] | 254 » mov» edx,DWORD[rcx*4+rdi] |
251 » mov» DWORD PTR[rcx*4+rdi],eax | 255 » mov» DWORD[rcx*4+rdi],eax |
252 » add» al,dl | 256 » add» al,dl |
253 » mov» ebx,DWORD PTR[28+rsi] | 257 » mov» ebx,DWORD[28+rsi] |
254 » movzx» eax,al | 258 » movzx» eax,al |
255 » mov» DWORD PTR[24+rsi],edx | 259 » mov» DWORD[24+rsi],edx |
256 » add» cl,bl | 260 » add» cl,bl |
257 » pinsrw» xmm0,WORD PTR[rax*4+rdi],3 | 261 » pinsrw» xmm0,WORD[rax*4+rdi],3 |
258 » mov» edx,DWORD PTR[rcx*4+rdi] | 262 » mov» edx,DWORD[rcx*4+rdi] |
259 » mov» DWORD PTR[rcx*4+rdi],ebx | 263 » mov» DWORD[rcx*4+rdi],ebx |
260 » add» bl,dl | 264 » add» bl,dl |
261 » mov» eax,DWORD PTR[32+rsi] | 265 » mov» eax,DWORD[32+rsi] |
262 » movzx» ebx,bl | 266 » movzx» ebx,bl |
263 » mov» DWORD PTR[28+rsi],edx | 267 » mov» DWORD[28+rsi],edx |
264 » add» cl,al | 268 » add» cl,al |
265 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],3 | 269 » pinsrw» xmm1,WORD[rbx*4+rdi],3 |
266 » mov» edx,DWORD PTR[rcx*4+rdi] | 270 » mov» edx,DWORD[rcx*4+rdi] |
267 » mov» DWORD PTR[rcx*4+rdi],eax | 271 » mov» DWORD[rcx*4+rdi],eax |
268 » add» al,dl | 272 » add» al,dl |
269 » mov» ebx,DWORD PTR[36+rsi] | 273 » mov» ebx,DWORD[36+rsi] |
270 » movzx» eax,al | 274 » movzx» eax,al |
271 » mov» DWORD PTR[32+rsi],edx | 275 » mov» DWORD[32+rsi],edx |
272 » add» cl,bl | 276 » add» cl,bl |
273 » pinsrw» xmm0,WORD PTR[rax*4+rdi],4 | 277 » pinsrw» xmm0,WORD[rax*4+rdi],4 |
274 » mov» edx,DWORD PTR[rcx*4+rdi] | 278 » mov» edx,DWORD[rcx*4+rdi] |
275 » mov» DWORD PTR[rcx*4+rdi],ebx | 279 » mov» DWORD[rcx*4+rdi],ebx |
276 » add» bl,dl | 280 » add» bl,dl |
277 » mov» eax,DWORD PTR[40+rsi] | 281 » mov» eax,DWORD[40+rsi] |
278 » movzx» ebx,bl | 282 » movzx» ebx,bl |
279 » mov» DWORD PTR[36+rsi],edx | 283 » mov» DWORD[36+rsi],edx |
280 » add» cl,al | 284 » add» cl,al |
281 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],4 | 285 » pinsrw» xmm1,WORD[rbx*4+rdi],4 |
282 » mov» edx,DWORD PTR[rcx*4+rdi] | 286 » mov» edx,DWORD[rcx*4+rdi] |
283 » mov» DWORD PTR[rcx*4+rdi],eax | 287 » mov» DWORD[rcx*4+rdi],eax |
284 » add» al,dl | 288 » add» al,dl |
285 » mov» ebx,DWORD PTR[44+rsi] | 289 » mov» ebx,DWORD[44+rsi] |
286 » movzx» eax,al | 290 » movzx» eax,al |
287 » mov» DWORD PTR[40+rsi],edx | 291 » mov» DWORD[40+rsi],edx |
288 » add» cl,bl | 292 » add» cl,bl |
289 » pinsrw» xmm0,WORD PTR[rax*4+rdi],5 | 293 » pinsrw» xmm0,WORD[rax*4+rdi],5 |
290 » mov» edx,DWORD PTR[rcx*4+rdi] | 294 » mov» edx,DWORD[rcx*4+rdi] |
291 » mov» DWORD PTR[rcx*4+rdi],ebx | 295 » mov» DWORD[rcx*4+rdi],ebx |
292 » add» bl,dl | 296 » add» bl,dl |
293 » mov» eax,DWORD PTR[48+rsi] | 297 » mov» eax,DWORD[48+rsi] |
294 » movzx» ebx,bl | 298 » movzx» ebx,bl |
295 » mov» DWORD PTR[44+rsi],edx | 299 » mov» DWORD[44+rsi],edx |
296 » add» cl,al | 300 » add» cl,al |
297 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],5 | 301 » pinsrw» xmm1,WORD[rbx*4+rdi],5 |
298 » mov» edx,DWORD PTR[rcx*4+rdi] | 302 » mov» edx,DWORD[rcx*4+rdi] |
299 » mov» DWORD PTR[rcx*4+rdi],eax | 303 » mov» DWORD[rcx*4+rdi],eax |
300 » add» al,dl | 304 » add» al,dl |
301 » mov» ebx,DWORD PTR[52+rsi] | 305 » mov» ebx,DWORD[52+rsi] |
302 » movzx» eax,al | 306 » movzx» eax,al |
303 » mov» DWORD PTR[48+rsi],edx | 307 » mov» DWORD[48+rsi],edx |
304 » add» cl,bl | 308 » add» cl,bl |
305 » pinsrw» xmm0,WORD PTR[rax*4+rdi],6 | 309 » pinsrw» xmm0,WORD[rax*4+rdi],6 |
306 » mov» edx,DWORD PTR[rcx*4+rdi] | 310 » mov» edx,DWORD[rcx*4+rdi] |
307 » mov» DWORD PTR[rcx*4+rdi],ebx | 311 » mov» DWORD[rcx*4+rdi],ebx |
308 » add» bl,dl | 312 » add» bl,dl |
309 » mov» eax,DWORD PTR[56+rsi] | 313 » mov» eax,DWORD[56+rsi] |
310 » movzx» ebx,bl | 314 » movzx» ebx,bl |
311 » mov» DWORD PTR[52+rsi],edx | 315 » mov» DWORD[52+rsi],edx |
312 » add» cl,al | 316 » add» cl,al |
313 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],6 | 317 » pinsrw» xmm1,WORD[rbx*4+rdi],6 |
314 » mov» edx,DWORD PTR[rcx*4+rdi] | 318 » mov» edx,DWORD[rcx*4+rdi] |
315 » mov» DWORD PTR[rcx*4+rdi],eax | 319 » mov» DWORD[rcx*4+rdi],eax |
316 » add» al,dl | 320 » add» al,dl |
317 » mov» ebx,DWORD PTR[60+rsi] | 321 » mov» ebx,DWORD[60+rsi] |
318 » movzx» eax,al | 322 » movzx» eax,al |
319 » mov» DWORD PTR[56+rsi],edx | 323 » mov» DWORD[56+rsi],edx |
320 » add» cl,bl | 324 » add» cl,bl |
321 » pinsrw» xmm0,WORD PTR[rax*4+rdi],7 | 325 » pinsrw» xmm0,WORD[rax*4+rdi],7 |
322 add r10b,16 | 326 add r10b,16 |
323 » movdqu» xmm2,XMMWORD PTR[r12] | 327 » movdqu» xmm2,XMMWORD[r12] |
324 » mov» edx,DWORD PTR[rcx*4+rdi] | 328 » mov» edx,DWORD[rcx*4+rdi] |
325 » mov» DWORD PTR[rcx*4+rdi],ebx | 329 » mov» DWORD[rcx*4+rdi],ebx |
326 » add» bl,dl | 330 » add» bl,dl |
327 » movzx» ebx,bl | 331 » movzx» ebx,bl |
328 » mov» DWORD PTR[60+rsi],edx | 332 » mov» DWORD[60+rsi],edx |
329 » lea» rsi,QWORD PTR[r10*4+rdi] | 333 » lea» rsi,[r10*4+rdi] |
330 » pinsrw» xmm1,WORD PTR[rbx*4+rdi],7 | 334 » pinsrw» xmm1,WORD[rbx*4+rdi],7 |
331 » mov» eax,DWORD PTR[rsi] | 335 » mov» eax,DWORD[rsi] |
332 mov rbx,rcx | 336 mov rbx,rcx |
333 xor rcx,rcx | 337 xor rcx,rcx |
334 sub r11,16 | 338 sub r11,16 |
335 mov cl,bl | 339 mov cl,bl |
336 test r11,-16 | 340 test r11,-16 |
337 » jnz» $L$oop16 | 341 » jnz» NEAR $L$oop16 |
338 | 342 |
339 psllq xmm1,8 | 343 psllq xmm1,8 |
340 pxor xmm2,xmm0 | 344 pxor xmm2,xmm0 |
341 pxor xmm2,xmm1 | 345 pxor xmm2,xmm1 |
342 » movdqu» XMMWORD PTR[r13*1+r12],xmm2 | 346 » movdqu» XMMWORD[r13*1+r12],xmm2 |
343 » lea» r12,QWORD PTR[16+r12] | 347 » lea» r12,[16+r12] |
344 | 348 |
345 cmp r11,0 | 349 cmp r11,0 |
346 » jne» $L$loop1 | 350 » jne» NEAR $L$loop1 |
347 » jmp» $L$exit | 351 » jmp» NEAR $L$exit |
348 | 352 |
349 ALIGN» 16 | 353 ALIGN» 16 |
350 $L$loop1:: | 354 $L$loop1: |
351 » add» cl,al | 355 » add» cl,al |
352 » mov» edx,DWORD PTR[rcx*4+rdi] | 356 » mov» edx,DWORD[rcx*4+rdi] |
353 » mov» DWORD PTR[rcx*4+rdi],eax | 357 » mov» DWORD[rcx*4+rdi],eax |
354 » mov» DWORD PTR[r10*4+rdi],edx | 358 » mov» DWORD[r10*4+rdi],edx |
355 add al,dl | 359 add al,dl |
356 inc r10b | 360 inc r10b |
357 » mov» edx,DWORD PTR[rax*4+rdi] | 361 » mov» edx,DWORD[rax*4+rdi] |
358 » mov» eax,DWORD PTR[r10*4+rdi] | 362 » mov» eax,DWORD[r10*4+rdi] |
359 » xor» dl,BYTE PTR[r12] | 363 » xor» dl,BYTE[r12] |
360 » mov» BYTE PTR[r13*1+r12],dl | 364 » mov» BYTE[r13*1+r12],dl |
361 » lea» r12,QWORD PTR[1+r12] | 365 » lea» r12,[1+r12] |
362 dec r11 | 366 dec r11 |
363 » jnz» $L$loop1 | 367 » jnz» NEAR $L$loop1 |
364 » jmp» $L$exit | 368 » jmp» NEAR $L$exit |
365 | 369 |
366 ALIGN» 16 | 370 ALIGN» 16 |
367 $L$RC4_CHAR:: | 371 $L$RC4_CHAR: |
368 add r10b,1 | 372 add r10b,1 |
369 » movzx» eax,BYTE PTR[r10*1+rdi] | 373 » movzx» eax,BYTE[r10*1+rdi] |
370 test r11,-8 | 374 test r11,-8 |
371 » jz» $L$cloop1 | 375 » jz» NEAR $L$cloop1 |
372 » jmp» $L$cloop8 | 376 » jmp» NEAR $L$cloop8 |
373 ALIGN» 16 | 377 ALIGN» 16 |
374 $L$cloop8:: | 378 $L$cloop8: |
375 » mov» r8d,DWORD PTR[r12] | 379 » mov» r8d,DWORD[r12] |
376 » mov» r9d,DWORD PTR[4+r12] | 380 » mov» r9d,DWORD[4+r12] |
377 » add» cl,al | 381 » add» cl,al |
378 » lea» rsi,QWORD PTR[1+r10] | 382 » lea» rsi,[1+r10] |
379 » movzx» edx,BYTE PTR[rcx*1+rdi] | 383 » movzx» edx,BYTE[rcx*1+rdi] |
380 movzx esi,sil | 384 movzx esi,sil |
381 » movzx» ebx,BYTE PTR[rsi*1+rdi] | 385 » movzx» ebx,BYTE[rsi*1+rdi] |
382 » mov» BYTE PTR[rcx*1+rdi],al | 386 » mov» BYTE[rcx*1+rdi],al |
383 cmp rcx,rsi | 387 cmp rcx,rsi |
384 » mov» BYTE PTR[r10*1+rdi],dl | 388 » mov» BYTE[r10*1+rdi],dl |
385 » jne» $L$cmov0 | 389 » jne» NEAR $L$cmov0 |
386 mov rbx,rax | 390 mov rbx,rax |
387 $L$cmov0:: | 391 $L$cmov0: |
388 » add» dl,al | 392 » add» dl,al |
389 » xor» r8b,BYTE PTR[rdx*1+rdi] | 393 » xor» r8b,BYTE[rdx*1+rdi] |
390 ror r8d,8 | 394 ror r8d,8 |
391 add cl,bl | 395 add cl,bl |
392 » lea» r10,QWORD PTR[1+rsi] | 396 » lea» r10,[1+rsi] |
393 » movzx» edx,BYTE PTR[rcx*1+rdi] | 397 » movzx» edx,BYTE[rcx*1+rdi] |
394 movzx r10d,r10b | 398 movzx r10d,r10b |
395 » movzx» eax,BYTE PTR[r10*1+rdi] | 399 » movzx» eax,BYTE[r10*1+rdi] |
396 » mov» BYTE PTR[rcx*1+rdi],bl | 400 » mov» BYTE[rcx*1+rdi],bl |
397 cmp rcx,r10 | 401 cmp rcx,r10 |
398 » mov» BYTE PTR[rsi*1+rdi],dl | 402 » mov» BYTE[rsi*1+rdi],dl |
399 » jne» $L$cmov1 | 403 » jne» NEAR $L$cmov1 |
400 mov rax,rbx | 404 mov rax,rbx |
401 $L$cmov1:: | 405 $L$cmov1: |
402 » add» dl,bl | 406 » add» dl,bl |
403 » xor» r8b,BYTE PTR[rdx*1+rdi] | 407 » xor» r8b,BYTE[rdx*1+rdi] |
404 ror r8d,8 | 408 ror r8d,8 |
405 add cl,al | 409 add cl,al |
406 » lea» rsi,QWORD PTR[1+r10] | 410 » lea» rsi,[1+r10] |
407 » movzx» edx,BYTE PTR[rcx*1+rdi] | 411 » movzx» edx,BYTE[rcx*1+rdi] |
408 movzx esi,sil | 412 movzx esi,sil |
409 » movzx» ebx,BYTE PTR[rsi*1+rdi] | 413 » movzx» ebx,BYTE[rsi*1+rdi] |
410 » mov» BYTE PTR[rcx*1+rdi],al | 414 » mov» BYTE[rcx*1+rdi],al |
411 cmp rcx,rsi | 415 cmp rcx,rsi |
412 » mov» BYTE PTR[r10*1+rdi],dl | 416 » mov» BYTE[r10*1+rdi],dl |
413 » jne» $L$cmov2 | 417 » jne» NEAR $L$cmov2 |
414 mov rbx,rax | 418 mov rbx,rax |
415 $L$cmov2:: | 419 $L$cmov2: |
416 » add» dl,al | 420 » add» dl,al |
417 » xor» r8b,BYTE PTR[rdx*1+rdi] | 421 » xor» r8b,BYTE[rdx*1+rdi] |
418 ror r8d,8 | 422 ror r8d,8 |
419 add cl,bl | 423 add cl,bl |
420 » lea» r10,QWORD PTR[1+rsi] | 424 » lea» r10,[1+rsi] |
421 » movzx» edx,BYTE PTR[rcx*1+rdi] | 425 » movzx» edx,BYTE[rcx*1+rdi] |
422 movzx r10d,r10b | 426 movzx r10d,r10b |
423 » movzx» eax,BYTE PTR[r10*1+rdi] | 427 » movzx» eax,BYTE[r10*1+rdi] |
424 » mov» BYTE PTR[rcx*1+rdi],bl | 428 » mov» BYTE[rcx*1+rdi],bl |
425 cmp rcx,r10 | 429 cmp rcx,r10 |
426 » mov» BYTE PTR[rsi*1+rdi],dl | 430 » mov» BYTE[rsi*1+rdi],dl |
427 » jne» $L$cmov3 | 431 » jne» NEAR $L$cmov3 |
428 mov rax,rbx | 432 mov rax,rbx |
429 $L$cmov3:: | 433 $L$cmov3: |
430 » add» dl,bl | 434 » add» dl,bl |
431 » xor» r8b,BYTE PTR[rdx*1+rdi] | 435 » xor» r8b,BYTE[rdx*1+rdi] |
432 ror r8d,8 | 436 ror r8d,8 |
433 add cl,al | 437 add cl,al |
434 » lea» rsi,QWORD PTR[1+r10] | 438 » lea» rsi,[1+r10] |
435 » movzx» edx,BYTE PTR[rcx*1+rdi] | 439 » movzx» edx,BYTE[rcx*1+rdi] |
436 movzx esi,sil | 440 movzx esi,sil |
437 » movzx» ebx,BYTE PTR[rsi*1+rdi] | 441 » movzx» ebx,BYTE[rsi*1+rdi] |
438 » mov» BYTE PTR[rcx*1+rdi],al | 442 » mov» BYTE[rcx*1+rdi],al |
439 cmp rcx,rsi | 443 cmp rcx,rsi |
440 » mov» BYTE PTR[r10*1+rdi],dl | 444 » mov» BYTE[r10*1+rdi],dl |
441 » jne» $L$cmov4 | 445 » jne» NEAR $L$cmov4 |
442 mov rbx,rax | 446 mov rbx,rax |
443 $L$cmov4:: | 447 $L$cmov4: |
444 » add» dl,al | 448 » add» dl,al |
445 » xor» r9b,BYTE PTR[rdx*1+rdi] | 449 » xor» r9b,BYTE[rdx*1+rdi] |
446 ror r9d,8 | 450 ror r9d,8 |
447 add cl,bl | 451 add cl,bl |
448 » lea» r10,QWORD PTR[1+rsi] | 452 » lea» r10,[1+rsi] |
449 » movzx» edx,BYTE PTR[rcx*1+rdi] | 453 » movzx» edx,BYTE[rcx*1+rdi] |
450 movzx r10d,r10b | 454 movzx r10d,r10b |
451 » movzx» eax,BYTE PTR[r10*1+rdi] | 455 » movzx» eax,BYTE[r10*1+rdi] |
452 » mov» BYTE PTR[rcx*1+rdi],bl | 456 » mov» BYTE[rcx*1+rdi],bl |
453 cmp rcx,r10 | 457 cmp rcx,r10 |
454 » mov» BYTE PTR[rsi*1+rdi],dl | 458 » mov» BYTE[rsi*1+rdi],dl |
455 » jne» $L$cmov5 | 459 » jne» NEAR $L$cmov5 |
456 mov rax,rbx | 460 mov rax,rbx |
457 $L$cmov5:: | 461 $L$cmov5: |
458 » add» dl,bl | 462 » add» dl,bl |
459 » xor» r9b,BYTE PTR[rdx*1+rdi] | 463 » xor» r9b,BYTE[rdx*1+rdi] |
460 ror r9d,8 | 464 ror r9d,8 |
461 add cl,al | 465 add cl,al |
462 » lea» rsi,QWORD PTR[1+r10] | 466 » lea» rsi,[1+r10] |
463 » movzx» edx,BYTE PTR[rcx*1+rdi] | 467 » movzx» edx,BYTE[rcx*1+rdi] |
464 movzx esi,sil | 468 movzx esi,sil |
465 » movzx» ebx,BYTE PTR[rsi*1+rdi] | 469 » movzx» ebx,BYTE[rsi*1+rdi] |
466 » mov» BYTE PTR[rcx*1+rdi],al | 470 » mov» BYTE[rcx*1+rdi],al |
467 cmp rcx,rsi | 471 cmp rcx,rsi |
468 » mov» BYTE PTR[r10*1+rdi],dl | 472 » mov» BYTE[r10*1+rdi],dl |
469 » jne» $L$cmov6 | 473 » jne» NEAR $L$cmov6 |
470 mov rbx,rax | 474 mov rbx,rax |
471 $L$cmov6:: | 475 $L$cmov6: |
472 » add» dl,al | 476 » add» dl,al |
473 » xor» r9b,BYTE PTR[rdx*1+rdi] | 477 » xor» r9b,BYTE[rdx*1+rdi] |
474 ror r9d,8 | 478 ror r9d,8 |
475 add cl,bl | 479 add cl,bl |
476 » lea» r10,QWORD PTR[1+rsi] | 480 » lea» r10,[1+rsi] |
477 » movzx» edx,BYTE PTR[rcx*1+rdi] | 481 » movzx» edx,BYTE[rcx*1+rdi] |
478 movzx r10d,r10b | 482 movzx r10d,r10b |
479 » movzx» eax,BYTE PTR[r10*1+rdi] | 483 » movzx» eax,BYTE[r10*1+rdi] |
480 » mov» BYTE PTR[rcx*1+rdi],bl | 484 » mov» BYTE[rcx*1+rdi],bl |
481 cmp rcx,r10 | 485 cmp rcx,r10 |
482 » mov» BYTE PTR[rsi*1+rdi],dl | 486 » mov» BYTE[rsi*1+rdi],dl |
483 » jne» $L$cmov7 | 487 » jne» NEAR $L$cmov7 |
484 mov rax,rbx | 488 mov rax,rbx |
485 $L$cmov7:: | 489 $L$cmov7: |
486 » add» dl,bl | 490 » add» dl,bl |
487 » xor» r9b,BYTE PTR[rdx*1+rdi] | 491 » xor» r9b,BYTE[rdx*1+rdi] |
488 ror r9d,8 | 492 ror r9d,8 |
489 » lea» r11,QWORD PTR[((-8))+r11] | 493 » lea» r11,[((-8))+r11] |
490 » mov» DWORD PTR[r13],r8d | 494 » mov» DWORD[r13],r8d |
491 » lea» r12,QWORD PTR[8+r12] | 495 » lea» r12,[8+r12] |
492 » mov» DWORD PTR[4+r13],r9d | 496 » mov» DWORD[4+r13],r9d |
493 » lea» r13,QWORD PTR[8+r13] | 497 » lea» r13,[8+r13] |
494 | 498 |
495 test r11,-8 | 499 test r11,-8 |
496 » jnz» $L$cloop8 | 500 » jnz» NEAR $L$cloop8 |
497 cmp r11,0 | 501 cmp r11,0 |
498 » jne» $L$cloop1 | 502 » jne» NEAR $L$cloop1 |
499 » jmp» $L$exit | 503 » jmp» NEAR $L$exit |
500 ALIGN» 16 | 504 ALIGN» 16 |
501 $L$cloop1:: | 505 $L$cloop1: |
502 add cl,al | 506 add cl,al |
503 movzx ecx,cl | 507 movzx ecx,cl |
504 » movzx» edx,BYTE PTR[rcx*1+rdi] | 508 » movzx» edx,BYTE[rcx*1+rdi] |
505 » mov» BYTE PTR[rcx*1+rdi],al | 509 » mov» BYTE[rcx*1+rdi],al |
506 » mov» BYTE PTR[r10*1+rdi],dl | 510 » mov» BYTE[r10*1+rdi],dl |
507 add dl,al | 511 add dl,al |
508 add r10b,1 | 512 add r10b,1 |
509 movzx edx,dl | 513 movzx edx,dl |
510 movzx r10d,r10b | 514 movzx r10d,r10b |
511 » movzx» edx,BYTE PTR[rdx*1+rdi] | 515 » movzx» edx,BYTE[rdx*1+rdi] |
512 » movzx» eax,BYTE PTR[r10*1+rdi] | 516 » movzx» eax,BYTE[r10*1+rdi] |
513 » xor» dl,BYTE PTR[r12] | 517 » xor» dl,BYTE[r12] |
514 » lea» r12,QWORD PTR[1+r12] | 518 » lea» r12,[1+r12] |
515 » mov» BYTE PTR[r13],dl | 519 » mov» BYTE[r13],dl |
516 » lea» r13,QWORD PTR[1+r13] | 520 » lea» r13,[1+r13] |
517 sub r11,1 | 521 sub r11,1 |
518 » jnz» $L$cloop1 | 522 » jnz» NEAR $L$cloop1 |
519 » jmp» $L$exit | 523 » jmp» NEAR $L$exit |
520 | 524 |
521 ALIGN» 16 | 525 ALIGN» 16 |
522 $L$exit:: | 526 $L$exit: |
523 sub r10b,1 | 527 sub r10b,1 |
524 » mov» DWORD PTR[((-8))+rdi],r10d | 528 » mov» DWORD[((-8))+rdi],r10d |
525 » mov» DWORD PTR[((-4))+rdi],ecx | 529 » mov» DWORD[((-4))+rdi],ecx |
526 | 530 |
527 » mov» r13,QWORD PTR[rsp] | 531 » mov» r13,QWORD[rsp] |
528 » mov» r12,QWORD PTR[8+rsp] | 532 » mov» r12,QWORD[8+rsp] |
529 » mov» rbx,QWORD PTR[16+rsp] | 533 » mov» rbx,QWORD[16+rsp] |
530 add rsp,24 | 534 add rsp,24 |
531 $L$epilogue:: | 535 $L$epilogue: |
532 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue | 536 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue |
533 » mov» rsi,QWORD PTR[16+rsp] | 537 » mov» rsi,QWORD[16+rsp] |
534 DB 0F3h,0C3h ;repret | 538 DB 0F3h,0C3h ;repret |
535 $L$SEH_end_asm_RC4:: | 539 $L$SEH_end_asm_RC4: |
536 asm_RC4»ENDP | 540 global» asm_RC4_set_key |
537 PUBLIC» asm_RC4_set_key | 541 |
538 | 542 ALIGN» 16 |
539 ALIGN» 16 | 543 asm_RC4_set_key: |
540 asm_RC4_set_key»PROC PUBLIC | 544 » mov» QWORD[8+rsp],rdi» ;WIN64 prologue |
541 » mov» QWORD PTR[8+rsp],rdi» ;WIN64 prologue | 545 » mov» QWORD[16+rsp],rsi |
542 » mov» QWORD PTR[16+rsp],rsi | |
543 mov rax,rsp | 546 mov rax,rsp |
544 $L$SEH_begin_asm_RC4_set_key:: | 547 $L$SEH_begin_asm_RC4_set_key: |
545 mov rdi,rcx | 548 mov rdi,rcx |
546 mov rsi,rdx | 549 mov rsi,rdx |
547 mov rdx,r8 | 550 mov rdx,r8 |
548 | 551 |
549 | 552 |
550 » lea» rdi,QWORD PTR[8+rdi] | 553 » lea» rdi,[8+rdi] |
551 » lea» rdx,QWORD PTR[rsi*1+rdx] | 554 » lea» rdx,[rsi*1+rdx] |
552 neg rsi | 555 neg rsi |
553 mov rcx,rsi | 556 mov rcx,rsi |
554 xor eax,eax | 557 xor eax,eax |
555 xor r9,r9 | 558 xor r9,r9 |
556 xor r10,r10 | 559 xor r10,r10 |
557 xor r11,r11 | 560 xor r11,r11 |
558 | 561 |
559 » mov» r8d,DWORD PTR[OPENSSL_ia32cap_P] | 562 » mov» r8d,DWORD[OPENSSL_ia32cap_P] |
560 bt r8d,20 | 563 bt r8d,20 |
561 » jc» $L$c1stloop | 564 » jc» NEAR $L$c1stloop |
562 » jmp» $L$w1stloop | 565 » jmp» NEAR $L$w1stloop |
563 | 566 |
564 ALIGN 16 | 567 ALIGN 16 |
565 $L$w1stloop:: | 568 $L$w1stloop: |
566 » mov» DWORD PTR[rax*4+rdi],eax | 569 » mov» DWORD[rax*4+rdi],eax |
567 add al,1 | 570 add al,1 |
568 » jnc» $L$w1stloop | 571 » jnc» NEAR $L$w1stloop |
569 | 572 |
570 xor r9,r9 | 573 xor r9,r9 |
571 xor r8,r8 | 574 xor r8,r8 |
572 ALIGN 16 | 575 ALIGN 16 |
573 $L$w2ndloop:: | 576 $L$w2ndloop: |
574 » mov» r10d,DWORD PTR[r9*4+rdi] | 577 » mov» r10d,DWORD[r9*4+rdi] |
575 » add» r8b,BYTE PTR[rsi*1+rdx] | 578 » add» r8b,BYTE[rsi*1+rdx] |
576 add r8b,r10b | 579 add r8b,r10b |
577 add rsi,1 | 580 add rsi,1 |
578 » mov» r11d,DWORD PTR[r8*4+rdi] | 581 » mov» r11d,DWORD[r8*4+rdi] |
579 cmovz rsi,rcx | 582 cmovz rsi,rcx |
580 » mov» DWORD PTR[r8*4+rdi],r10d | 583 » mov» DWORD[r8*4+rdi],r10d |
581 » mov» DWORD PTR[r9*4+rdi],r11d | 584 » mov» DWORD[r9*4+rdi],r11d |
582 add r9b,1 | 585 add r9b,1 |
583 » jnc» $L$w2ndloop | 586 » jnc» NEAR $L$w2ndloop |
584 » jmp» $L$exit_key | 587 » jmp» NEAR $L$exit_key |
585 | 588 |
586 ALIGN 16 | 589 ALIGN 16 |
587 $L$c1stloop:: | 590 $L$c1stloop: |
588 » mov» BYTE PTR[rax*1+rdi],al | 591 » mov» BYTE[rax*1+rdi],al |
589 add al,1 | 592 add al,1 |
590 » jnc» $L$c1stloop | 593 » jnc» NEAR $L$c1stloop |
591 | 594 |
592 xor r9,r9 | 595 xor r9,r9 |
593 xor r8,r8 | 596 xor r8,r8 |
594 ALIGN 16 | 597 ALIGN 16 |
595 $L$c2ndloop:: | 598 $L$c2ndloop: |
596 » mov» r10b,BYTE PTR[r9*1+rdi] | 599 » mov» r10b,BYTE[r9*1+rdi] |
597 » add» r8b,BYTE PTR[rsi*1+rdx] | 600 » add» r8b,BYTE[rsi*1+rdx] |
598 add r8b,r10b | 601 add r8b,r10b |
599 add rsi,1 | 602 add rsi,1 |
600 » mov» r11b,BYTE PTR[r8*1+rdi] | 603 » mov» r11b,BYTE[r8*1+rdi] |
601 » jnz» $L$cnowrap | 604 » jnz» NEAR $L$cnowrap |
602 mov rsi,rcx | 605 mov rsi,rcx |
603 $L$cnowrap:: | 606 $L$cnowrap: |
604 » mov» BYTE PTR[r8*1+rdi],r10b | 607 » mov» BYTE[r8*1+rdi],r10b |
605 » mov» BYTE PTR[r9*1+rdi],r11b | 608 » mov» BYTE[r9*1+rdi],r11b |
606 add r9b,1 | 609 add r9b,1 |
607 » jnc» $L$c2ndloop | 610 » jnc» NEAR $L$c2ndloop |
608 » mov» DWORD PTR[256+rdi],-1 | 611 » mov» DWORD[256+rdi],-1 |
609 | 612 |
610 ALIGN 16 | 613 ALIGN 16 |
611 $L$exit_key:: | 614 $L$exit_key: |
612 xor eax,eax | 615 xor eax,eax |
613 » mov» DWORD PTR[((-8))+rdi],eax | 616 » mov» DWORD[((-8))+rdi],eax |
614 » mov» DWORD PTR[((-4))+rdi],eax | 617 » mov» DWORD[((-4))+rdi],eax |
615 » mov» rdi,QWORD PTR[8+rsp]» ;WIN64 epilogue | 618 » mov» rdi,QWORD[8+rsp]» ;WIN64 epilogue |
616 » mov» rsi,QWORD PTR[16+rsp] | 619 » mov» rsi,QWORD[16+rsp] |
617 DB 0F3h,0C3h ;repret | 620 DB 0F3h,0C3h ;repret |
618 $L$SEH_end_asm_RC4_set_key:: | 621 $L$SEH_end_asm_RC4_set_key: |
619 asm_RC4_set_key»ENDP | |
620 | 622 |
621 PUBLIC» RC4_options | 623 global» RC4_options |
622 | 624 |
623 ALIGN 16 | 625 ALIGN 16 |
624 RC4_options» PROC PUBLIC | 626 RC4_options: |
625 » lea» rax,QWORD PTR[$L$opts] | 627 » lea» rax,[$L$opts] |
626 » mov» rdx,QWORD PTR[OPENSSL_ia32cap_P] | 628 » mov» rdx,QWORD[OPENSSL_ia32cap_P] |
627 » mov» edx,DWORD PTR[rdx] | 629 » mov» edx,DWORD[rdx] |
628 bt edx,20 | 630 bt edx,20 |
629 » jc» $L$8xchar | 631 » jc» NEAR $L$8xchar |
630 bt edx,30 | 632 bt edx,30 |
631 » jnc» $L$done | 633 » jnc» NEAR $L$done |
632 add rax,25 | 634 add rax,25 |
633 DB 0F3h,0C3h ;repret | 635 DB 0F3h,0C3h ;repret |
634 $L$8xchar:: | 636 $L$8xchar: |
635 add rax,12 | 637 add rax,12 |
636 $L$done:: | 638 $L$done: |
637 DB 0F3h,0C3h ;repret | 639 DB 0F3h,0C3h ;repret |
638 ALIGN 64 | 640 ALIGN 64 |
639 $L$opts:: | 641 $L$opts: |
640 DB 114,99,52,40,56,120,44,105,110,116,41,0 | 642 DB 114,99,52,40,56,120,44,105,110,116,41,0 |
641 DB 114,99,52,40,56,120,44,99,104,97,114,41,0 | 643 DB 114,99,52,40,56,120,44,99,104,97,114,41,0 |
642 DB 114,99,52,40,49,54,120,44,105,110,116,41,0 | 644 DB 114,99,52,40,49,54,120,44,105,110,116,41,0 |
643 DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32 | 645 DB 82,67,52,32,102,111,114,32,120,56,54,95,54,52,44,32 |
644 DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 | 646 DB 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97 |
645 DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 | 647 DB 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103 |
646 DB 62,0 | 648 DB 62,0 |
647 ALIGN 64 | 649 ALIGN 64 |
648 RC4_options» ENDP | 650 |
649 EXTERN» __imp_RtlVirtualUnwind:NEAR | 651 EXTERN» __imp_RtlVirtualUnwind |
650 | 652 |
651 ALIGN 16 | 653 ALIGN 16 |
652 stream_se_handler» PROC PRIVATE | 654 stream_se_handler: |
653 push rsi | 655 push rsi |
654 push rdi | 656 push rdi |
655 push rbx | 657 push rbx |
656 push rbp | 658 push rbp |
657 push r12 | 659 push r12 |
658 push r13 | 660 push r13 |
659 push r14 | 661 push r14 |
660 push r15 | 662 push r15 |
661 pushfq | 663 pushfq |
662 sub rsp,64 | 664 sub rsp,64 |
663 | 665 |
664 » mov» rax,QWORD PTR[120+r8] | 666 » mov» rax,QWORD[120+r8] |
665 » mov» rbx,QWORD PTR[248+r8] | 667 » mov» rbx,QWORD[248+r8] |
666 | 668 |
667 » lea» r10,QWORD PTR[$L$prologue] | 669 » lea» r10,[$L$prologue] |
668 cmp rbx,r10 | 670 cmp rbx,r10 |
669 » jb» $L$in_prologue | 671 » jb» NEAR $L$in_prologue |
670 | 672 |
671 » mov» rax,QWORD PTR[152+r8] | 673 » mov» rax,QWORD[152+r8] |
672 | 674 |
673 » lea» r10,QWORD PTR[$L$epilogue] | 675 » lea» r10,[$L$epilogue] |
674 cmp rbx,r10 | 676 cmp rbx,r10 |
675 » jae» $L$in_prologue | 677 » jae» NEAR $L$in_prologue |
676 | 678 |
677 » lea» rax,QWORD PTR[24+rax] | 679 » lea» rax,[24+rax] |
678 | 680 |
679 » mov» rbx,QWORD PTR[((-8))+rax] | 681 » mov» rbx,QWORD[((-8))+rax] |
680 » mov» r12,QWORD PTR[((-16))+rax] | 682 » mov» r12,QWORD[((-16))+rax] |
681 » mov» r13,QWORD PTR[((-24))+rax] | 683 » mov» r13,QWORD[((-24))+rax] |
682 » mov» QWORD PTR[144+r8],rbx | 684 » mov» QWORD[144+r8],rbx |
683 » mov» QWORD PTR[216+r8],r12 | 685 » mov» QWORD[216+r8],r12 |
684 » mov» QWORD PTR[224+r8],r13 | 686 » mov» QWORD[224+r8],r13 |
685 | 687 |
686 $L$in_prologue:: | 688 $L$in_prologue: |
687 » mov» rdi,QWORD PTR[8+rax] | 689 » mov» rdi,QWORD[8+rax] |
688 » mov» rsi,QWORD PTR[16+rax] | 690 » mov» rsi,QWORD[16+rax] |
689 » mov» QWORD PTR[152+r8],rax | 691 » mov» QWORD[152+r8],rax |
690 » mov» QWORD PTR[168+r8],rsi | 692 » mov» QWORD[168+r8],rsi |
691 » mov» QWORD PTR[176+r8],rdi | 693 » mov» QWORD[176+r8],rdi |
692 | 694 |
693 » jmp» $L$common_seh_exit | 695 » jmp» NEAR $L$common_seh_exit |
694 stream_se_handler» ENDP | 696 |
695 | 697 |
696 | 698 |
697 ALIGN 16 | 699 ALIGN 16 |
698 key_se_handler» PROC PRIVATE | 700 key_se_handler: |
699 push rsi | 701 push rsi |
700 push rdi | 702 push rdi |
701 push rbx | 703 push rbx |
702 push rbp | 704 push rbp |
703 push r12 | 705 push r12 |
704 push r13 | 706 push r13 |
705 push r14 | 707 push r14 |
706 push r15 | 708 push r15 |
707 pushfq | 709 pushfq |
708 sub rsp,64 | 710 sub rsp,64 |
709 | 711 |
710 » mov» rax,QWORD PTR[152+r8] | 712 » mov» rax,QWORD[152+r8] |
711 » mov» rdi,QWORD PTR[8+rax] | 713 » mov» rdi,QWORD[8+rax] |
712 » mov» rsi,QWORD PTR[16+rax] | 714 » mov» rsi,QWORD[16+rax] |
713 » mov» QWORD PTR[168+r8],rsi | 715 » mov» QWORD[168+r8],rsi |
714 » mov» QWORD PTR[176+r8],rdi | 716 » mov» QWORD[176+r8],rdi |
715 | 717 |
716 $L$common_seh_exit:: | 718 $L$common_seh_exit: |
717 | 719 |
718 » mov» rdi,QWORD PTR[40+r9] | 720 » mov» rdi,QWORD[40+r9] |
719 mov rsi,r8 | 721 mov rsi,r8 |
720 mov ecx,154 | 722 mov ecx,154 |
721 » DD» 0a548f3fch | 723 » DD» 0xa548f3fc |
722 | 724 |
723 mov rsi,r9 | 725 mov rsi,r9 |
724 xor rcx,rcx | 726 xor rcx,rcx |
725 » mov» rdx,QWORD PTR[8+rsi] | 727 » mov» rdx,QWORD[8+rsi] |
726 » mov» r8,QWORD PTR[rsi] | 728 » mov» r8,QWORD[rsi] |
727 » mov» r9,QWORD PTR[16+rsi] | 729 » mov» r9,QWORD[16+rsi] |
728 » mov» r10,QWORD PTR[40+rsi] | 730 » mov» r10,QWORD[40+rsi] |
729 » lea» r11,QWORD PTR[56+rsi] | 731 » lea» r11,[56+rsi] |
730 » lea» r12,QWORD PTR[24+rsi] | 732 » lea» r12,[24+rsi] |
731 » mov» QWORD PTR[32+rsp],r10 | 733 » mov» QWORD[32+rsp],r10 |
732 » mov» QWORD PTR[40+rsp],r11 | 734 » mov» QWORD[40+rsp],r11 |
733 » mov» QWORD PTR[48+rsp],r12 | 735 » mov» QWORD[48+rsp],r12 |
734 » mov» QWORD PTR[56+rsp],rcx | 736 » mov» QWORD[56+rsp],rcx |
735 » call» QWORD PTR[__imp_RtlVirtualUnwind] | 737 » call» QWORD[__imp_RtlVirtualUnwind] |
736 | 738 |
737 mov eax,1 | 739 mov eax,1 |
738 add rsp,64 | 740 add rsp,64 |
739 popfq | 741 popfq |
740 pop r15 | 742 pop r15 |
741 pop r14 | 743 pop r14 |
742 pop r13 | 744 pop r13 |
743 pop r12 | 745 pop r12 |
744 pop rbp | 746 pop rbp |
745 pop rbx | 747 pop rbx |
746 pop rdi | 748 pop rdi |
747 pop rsi | 749 pop rsi |
748 DB 0F3h,0C3h ;repret | 750 DB 0F3h,0C3h ;repret |
749 key_se_handler ENDP | |
750 | 751 |
751 .text$» ENDS | 752 |
752 .pdata» SEGMENT READONLY ALIGN(4) | 753 section».pdata rdata align=4 |
753 ALIGN 4 | 754 ALIGN 4 |
754 » DD» imagerel $L$SEH_begin_asm_RC4 | 755 » DD» $L$SEH_begin_asm_RC4 wrt ..imagebase |
755 » DD» imagerel $L$SEH_end_asm_RC4 | 756 » DD» $L$SEH_end_asm_RC4 wrt ..imagebase |
756 » DD» imagerel $L$SEH_info_asm_RC4 | 757 » DD» $L$SEH_info_asm_RC4 wrt ..imagebase |
757 | 758 |
758 » DD» imagerel $L$SEH_begin_asm_RC4_set_key | 759 » DD» $L$SEH_begin_asm_RC4_set_key wrt ..imagebase |
759 » DD» imagerel $L$SEH_end_asm_RC4_set_key | 760 » DD» $L$SEH_end_asm_RC4_set_key wrt ..imagebase |
760 » DD» imagerel $L$SEH_info_asm_RC4_set_key | 761 » DD» $L$SEH_info_asm_RC4_set_key wrt ..imagebase |
761 | 762 |
762 .pdata» ENDS | 763 section».xdata rdata align=8 |
763 .xdata» SEGMENT READONLY ALIGN(8) | |
764 ALIGN 8 | 764 ALIGN 8 |
765 $L$SEH_info_asm_RC4:: | 765 $L$SEH_info_asm_RC4: |
766 DB 9,0,0,0 | 766 DB 9,0,0,0 |
767 » DD» imagerel stream_se_handler | 767 » DD» stream_se_handler wrt ..imagebase |
768 $L$SEH_info_asm_RC4_set_key:: | 768 $L$SEH_info_asm_RC4_set_key: |
769 DB 9,0,0,0 | 769 DB 9,0,0,0 |
770 » DD» imagerel key_se_handler | 770 » DD» key_se_handler wrt ..imagebase |
771 | |
772 .xdata» ENDS | |
773 END | |
OLD | NEW |