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