| 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 |