VirtualBox

source: vbox/trunk/src/libs/openssl-3.0.1/crypto/genasm-nasm/rc4-x86_64.S@ 94081

Last change on this file since 94081 was 83531, checked in by vboxsync, 5 years ago

setting svn:sync-process=export for openssl-1.1.1f, all files except tests

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette