OLD | NEW |
(Empty) | |
| 1 default rel |
| 2 %define XMMWORD |
| 3 %define YMMWORD |
| 4 %define ZMMWORD |
| 5 section .text code align=64 |
| 6 |
| 7 EXTERN OPENSSL_ia32cap_P |
| 8 |
| 9 global asm_RC4 |
| 10 |
| 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 |
| 21 |
| 22 |
| 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 |
| 38 |
| 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 |
| 72 |
| 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 |
| 145 |
| 146 xor r8,QWORD[r12] |
| 147 mov QWORD[r13*1+r12],r8 |
| 148 lea r12,[8+r12] |
| 149 |
| 150 test r11,-8 |
| 151 jnz NEAR $L$oop8 |
| 152 cmp r11,0 |
| 153 jne NEAR $L$loop1 |
| 154 jmp NEAR $L$exit |
| 155 |
| 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 |
| 177 |
| 178 mov rbx,rcx |
| 179 xor rcx,rcx |
| 180 mov cl,bl |
| 181 |
| 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 |
| 342 |
| 343 psllq xmm1,8 |
| 344 pxor xmm2,xmm0 |
| 345 pxor xmm2,xmm1 |
| 346 movdqu XMMWORD[r13*1+r12],xmm2 |
| 347 lea r12,[16+r12] |
| 348 |
| 349 cmp r11,0 |
| 350 jne NEAR $L$loop1 |
| 351 jmp NEAR $L$exit |
| 352 |
| 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 |
| 369 |
| 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] |
| 498 |
| 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 |
| 524 |
| 525 ALIGN 16 |
| 526 $L$exit: |
| 527 sub r10b,1 |
| 528 mov DWORD[((-8))+rdi],r10d |
| 529 mov DWORD[((-4))+rdi],ecx |
| 530 |
| 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 |
| 541 |
| 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 |
| 551 |
| 552 |
| 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 |
| 561 |
| 562 mov r8d,DWORD[OPENSSL_ia32cap_P] |
| 563 bt r8d,20 |
| 564 jc NEAR $L$c1stloop |
| 565 jmp NEAR $L$w1stloop |
| 566 |
| 567 ALIGN 16 |
| 568 $L$w1stloop: |
| 569 mov DWORD[rax*4+rdi],eax |
| 570 add al,1 |
| 571 jnc NEAR $L$w1stloop |
| 572 |
| 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 |
| 588 |
| 589 ALIGN 16 |
| 590 $L$c1stloop: |
| 591 mov BYTE[rax*1+rdi],al |
| 592 add al,1 |
| 593 jnc NEAR $L$c1stloop |
| 594 |
| 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 |
| 612 |
| 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 |
| 623 |
| 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 |
| 636 |
| 637 mov rax,QWORD[120+r8] |
| 638 mov rbx,QWORD[248+r8] |
| 639 |
| 640 lea r10,[$L$prologue] |
| 641 cmp rbx,r10 |
| 642 jb NEAR $L$in_prologue |
| 643 |
| 644 mov rax,QWORD[152+r8] |
| 645 |
| 646 lea r10,[$L$epilogue] |
| 647 cmp rbx,r10 |
| 648 jae NEAR $L$in_prologue |
| 649 |
| 650 lea rax,[24+rax] |
| 651 |
| 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 |
| 658 |
| 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 |
| 665 |
| 666 jmp NEAR $L$common_seh_exit |
| 667 |
| 668 |
| 669 |
| 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 |
| 682 |
| 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 |
| 688 |
| 689 $L$common_seh_exit: |
| 690 |
| 691 mov rdi,QWORD[40+r9] |
| 692 mov rsi,r8 |
| 693 mov ecx,154 |
| 694 DD 0xa548f3fc |
| 695 |
| 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] |
| 709 |
| 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 |
| 722 |
| 723 |
| 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 |
| 729 |
| 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 |
| 733 |
| 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 |
OLD | NEW |