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