RIP198001

Untitled

Jan 13th, 2022 (edited)
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 22.76 KB | None | 0 0
  1. .text:0000000141952270                                   ; __int64 __fastcall GameCross(__int64, unsigned __int8, unsigned __int64)
  2. .text:0000000141952270                                   GameCross       proc near               ; CODE XREF: sub_140125F30+63↑p
  3. .text:0000000141952270                                                                           ; sub_140142360+8D↑p ...
  4. .text:0000000141952270 000 4C 8B D9                                      mov     r11, rcx
  5. .text:0000000141952273 000 0F B6 D2                                      movzx   edx, dl
  6. .text:0000000141952276 000 49 B9 01 01 01 01 01 01 01 01                 mov     r9, 101010101010101h
  7. .text:0000000141952280 000 4C 0F AF CA                                   imul    r9, rdx
  8. .text:0000000141952284 000 49 83 F8 10                                   cmp     r8, 10h         ; switch 17 cases
  9. .text:0000000141952288 000 0F 86 F2 00 00 00                             jbe     loc_141952380
  10. .text:000000014195228E
  11. .text:000000014195228E                                   def_14195239B:                          ; jumptable 000000014195239B default case
  12. .text:000000014195228E 000 66 49 0F 6E C1                                movq    xmm0, r9
  13. .text:0000000141952293 000 66 0F 60 C0                                   punpcklbw xmm0, xmm0
  14. .text:0000000141952297 000 49 81 F8 80 00 00 00                          cmp     r8, 80h ; '€'
  15. .text:000000014195229E 000 77 10                                         ja      short loc_1419522B0
  16. .text:00000001419522A0 000 E9 6B 00 00 00                                jmp     loc_141952310
  17. .text:00000001419522A0                                   ; ---------------------------------------------------------------------------
  18. .text:00000001419522A5 000 66 66 66 0F 1F 84 00 00 00 00+                align 10h
  19. .text:00000001419522B0
  20. .text:00000001419522B0                                   loc_1419522B0:                          ; CODE XREF: GameCross+2E↑j
  21. .text:00000001419522B0 000 F6 05 D9 9E 70 00 02                          test    byte ptr cs:dword_14205C190, 2
  22. .text:00000001419522B7 000 75 97                                         jnz     short sub_141952250
  23. .text:00000001419522B9 000 0F 11 01                                      movups  xmmword ptr [rcx], xmm0
  24. .text:00000001419522BC 000 4C 03 C1                                      add     r8, rcx
  25. .text:00000001419522BF 000 48 83 C1 10                                   add     rcx, 10h
  26. .text:00000001419522C3 000 48 83 E1 F0                                   and     rcx, 0FFFFFFFFFFFFFFF0h
  27. .text:00000001419522C7 000 4C 2B C1                                      sub     r8, rcx
  28. .text:00000001419522CA 000 4D 8B C8                                      mov     r9, r8
  29. .text:00000001419522CD 000 49 C1 E9 07                                   shr     r9, 7
  30. .text:00000001419522D1 000 74 3D                                         jz      short loc_141952310
  31. .text:00000001419522D3 000 4C 3B 0D D6 E2 37 00                          cmp     r9, cs:qword_141CD05B0
  32. .text:00000001419522DA 000 0F 87 60 00 00 00                             ja      loc_141952340
  33. .text:00000001419522E0
  34. .text:00000001419522E0                                   loc_1419522E0:                          ; CODE XREF: GameCross+9A↓j
  35. .text:00000001419522E0 000 0F 29 01                                      movaps  xmmword ptr [rcx], xmm0
  36. .text:00000001419522E3 000 0F 29 41 10                                   movaps  xmmword ptr [rcx+10h], xmm0
  37. .text:00000001419522E7 000 48 81 C1 80 00 00 00                          add     rcx, 80h ; '€'
  38. .text:00000001419522EE 000 0F 29 41 A0                                   movaps  xmmword ptr [rcx-60h], xmm0
  39. .text:00000001419522F2 000 0F 29 41 B0                                   movaps  xmmword ptr [rcx-50h], xmm0
  40. .text:00000001419522F6 000 49 FF C9                                      dec     r9
  41. .text:00000001419522F9 000 0F 29 41 C0                                   movaps  xmmword ptr [rcx-40h], xmm0
  42. .text:00000001419522FD 000 0F 29 41 D0                                   movaps  xmmword ptr [rcx-30h], xmm0
  43. .text:0000000141952301 000 0F 29 41 E0                                   movaps  xmmword ptr [rcx-20h], xmm0
  44. .text:0000000141952305 000 66 0F 29 41 F0                                movapd  xmmword ptr [rcx-10h], xmm0
  45. .text:000000014195230A 000 75 D4                                         jnz     short loc_1419522E0
  46. .text:000000014195230C 000 49 83 E0 7F                                   and     r8, 7Fh
  47. .text:0000000141952310
  48. .text:0000000141952310                                   loc_141952310:                          ; CODE XREF: GameCross+30↑j
  49. .text:0000000141952310                                                                           ; GameCross+61↑j ...
  50. .text:0000000141952310 000 4D 8B C8                                      mov     r9, r8
  51. .text:0000000141952313 000 49 C1 E9 04                                   shr     r9, 4
  52. .text:0000000141952317 000 74 13                                         jz      short loc_14195232C
  53. .text:0000000141952319 000 0F 1F 80 00 00 00 00                          nop     dword ptr [rax+00000000h]
  54. .text:0000000141952320
  55. .text:0000000141952320                                   loc_141952320:                          ; CODE XREF: GameCross+BA↓j
  56. .text:0000000141952320 000 0F 11 01                                      movups  xmmword ptr [rcx], xmm0
  57. .text:0000000141952323 000 48 83 C1 10                                   add     rcx, 10h
  58. .text:0000000141952327 000 49 FF C9                                      dec     r9
  59. .text:000000014195232A 000 75 F4                                         jnz     short loc_141952320
  60. .text:000000014195232C
  61. .text:000000014195232C                                   loc_14195232C:                          ; CODE XREF: GameCross+A7↑j
  62. .text:000000014195232C 000 49 83 E0 0F                                   and     r8, 0Fh
  63. .text:0000000141952330 000 74 06                                         jz      short loc_141952338
  64. .text:0000000141952332 000 42 0F 11 44 01 F0                             movups  xmmword ptr [rcx+r8-10h], xmm0
  65. .text:0000000141952338
  66. .text:0000000141952338                                   loc_141952338:                          ; CODE XREF: GameCross+C0↑j
  67. .text:0000000141952338 000 49 8B C3                                      mov     rax, r11
  68. .text:000000014195233B 000 C3                                            retn
  69. .text:000000014195233B                                   ; ---------------------------------------------------------------------------
  70. .text:000000014195233C 000 0F 1F 40 00                                   align 20h
  71. .text:0000000141952340
  72. .text:0000000141952340                                   loc_141952340:                          ; CODE XREF: GameCross+6A↑j
  73. .text:0000000141952340                                                                           ; GameCross+F9↓j
  74. .text:0000000141952340 000 0F 2B 01                                      movntps xmmword ptr [rcx], xmm0
  75. .text:0000000141952343 000 0F 2B 41 10                                   movntps xmmword ptr [rcx+10h], xmm0
  76. .text:0000000141952347 000 48 81 C1 80 00 00 00                          add     rcx, 80h ; '€'
  77. .text:000000014195234E 000 0F 2B 41 A0                                   movntps xmmword ptr [rcx-60h], xmm0
  78. .text:0000000141952352 000 0F 2B 41 B0                                   movntps xmmword ptr [rcx-50h], xmm0
  79. .text:0000000141952356 000 49 FF C9                                      dec     r9
  80. .text:0000000141952359 000 0F 2B 41 C0                                   movntps xmmword ptr [rcx-40h], xmm0
  81. .text:000000014195235D 000 0F 2B 41 D0                                   movntps xmmword ptr [rcx-30h], xmm0
  82. .text:0000000141952361 000 0F 2B 41 E0                                   movntps xmmword ptr [rcx-20h], xmm0
  83. .text:0000000141952365 000 0F 2B 41 F0                                   movntps xmmword ptr [rcx-10h], xmm0
  84. .text:0000000141952369 000 75 D5                                         jnz     short loc_141952340
  85. .text:000000014195236B 000 0F AE F8                                      sfence
  86. .text:000000014195236E 000 49 83 E0 7F                                   and     r8, 7Fh
  87. .text:0000000141952372 000 EB 9C                                         jmp     short loc_141952310
  88. .text:0000000141952372                                   ; ---------------------------------------------------------------------------
  89. .text:0000000141952374 000 66 66 66 66 0F 1F 84 00 00 00+                align 20h
  90. .text:0000000141952380
  91. .text:0000000141952380                                   loc_141952380:                          ; CODE XREF: GameCross+18↑j
  92. .text:0000000141952380 000 49 8B D1                                      mov     rdx, r9
  93. .text:0000000141952383 000 4C 8D 0D 76 DC 6A FE                          lea     r9, cs:140000000h
  94. .text:000000014195238A 000 43 8B 84 81 00 50 A9 02                       mov     eax, ds:(jpt_14195239B - 140000000h)[r9+r8*4]
  95. .text:0000000141952392 000 4C 03 C8                                      add     r9, rax
  96. .text:0000000141952395 000 49 03 C8                                      add     rcx, r8
  97. .text:0000000141952398 000 49 8B C3                                      mov     rax, r11
  98. .text:000000014195239B 000 41 FF E1                                      jmp     r9              ; switch jump
  99. .text:000000014195239B                                   ; ---------------------------------------------------------------------------
  100. .text:000000014195239E 000 66 90                                         align 20h
  101. .text:00000001419523A0
  102. .text:00000001419523A0                                   loc_1419523A0:                          ; CODE XREF: GameCross+12B↑j
  103. .text:00000001419523A0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  104. .text:00000001419523A0 000 48 89 51 F1                                   mov     [rcx-0Fh], rdx  ; jumptable 000000014195239B case 15
  105. .text:00000001419523A4
  106. .text:00000001419523A4                                   loc_1419523A4:                          ; CODE XREF: GameCross+12B↑j
  107. .text:00000001419523A4                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  108. .text:00000001419523A4 000 89 51 F9                                      mov     [rcx-7], edx    ; jumptable 000000014195239B case 7
  109. .text:00000001419523A7
  110. .text:00000001419523A7                                   loc_1419523A7:                          ; CODE XREF: GameCross+12B↑j
  111. .text:00000001419523A7                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  112. .text:00000001419523A7 000 66 89 51 FD                                   mov     [rcx-3], dx     ; jumptable 000000014195239B case 3
  113. .text:00000001419523AB
  114. .text:00000001419523AB                                   loc_1419523AB:                          ; CODE XREF: GameCross+12B↑j
  115. .text:00000001419523AB                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  116. .text:00000001419523AB 000 88 51 FF                                      mov     [rcx-1], dl     ; jumptable 000000014195239B case 1
  117. .text:00000001419523AE
  118. .text:00000001419523AE                                   locret_1419523AE:                       ; CODE XREF: GameCross+12B↑j
  119. .text:00000001419523AE                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  120. .text:00000001419523AE 000 C3                                            retn                    ; jumptable 000000014195239B case 0
  121. .text:00000001419523AE                                   ; ---------------------------------------------------------------------------
  122. .text:00000001419523AF 000 90                                            align 10h
  123. .text:00000001419523B0
  124. .text:00000001419523B0                                   loc_1419523B0:                          ; CODE XREF: GameCross+12B↑j
  125. .text:00000001419523B0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  126. .text:00000001419523B0 000 48 89 51 F4                                   mov     [rcx-0Ch], rdx  ; jumptable 000000014195239B case 12
  127. .text:00000001419523B4
  128. .text:00000001419523B4                                   loc_1419523B4:                          ; CODE XREF: GameCross+12B↑j
  129. .text:00000001419523B4                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  130. .text:00000001419523B4 000 89 51 FC                                      mov     [rcx-4], edx    ; jumptable 000000014195239B case 4
  131. .text:00000001419523B7 000 C3                                            retn
  132. .text:00000001419523B8                                   ; ---------------------------------------------------------------------------
  133. .text:00000001419523B8
  134. .text:00000001419523B8                                   loc_1419523B8:                          ; CODE XREF: GameCross+12B↑j
  135. .text:00000001419523B8                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  136. .text:00000001419523B8 000 48 89 51 F7                                   mov     [rcx-9], rdx    ; jumptable 000000014195239B case 9
  137. .text:00000001419523BC 000 88 51 FF                                      mov     [rcx-1], dl
  138. .text:00000001419523BF 000 C3                                            retn
  139. .text:00000001419523C0                                   ; ---------------------------------------------------------------------------
  140. .text:00000001419523C0
  141. .text:00000001419523C0                                   loc_1419523C0:                          ; CODE XREF: GameCross+12B↑j
  142. .text:00000001419523C0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  143. .text:00000001419523C0 000 48 89 51 F3                                   mov     [rcx-0Dh], rdx  ; jumptable 000000014195239B case 13
  144. .text:00000001419523C4
  145. .text:00000001419523C4                                   loc_1419523C4:                          ; CODE XREF: GameCross+12B↑j
  146. .text:00000001419523C4                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  147. .text:00000001419523C4 000 89 51 FB                                      mov     [rcx-5], edx    ; jumptable 000000014195239B case 5
  148. .text:00000001419523C7 000 88 51 FF                                      mov     [rcx-1], dl
  149. .text:00000001419523CA 000 C3                                            retn
  150. .text:00000001419523CA                                   ; ---------------------------------------------------------------------------
  151. .text:00000001419523CB 000 0F 1F 44 00 00                                align 10h
  152. .text:00000001419523D0
  153. .text:00000001419523D0                                   loc_1419523D0:                          ; CODE XREF: GameCross+12B↑j
  154. .text:00000001419523D0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  155. .text:00000001419523D0 000 48 89 51 F2                                   mov     [rcx-0Eh], rdx  ; jumptable 000000014195239B case 14
  156. .text:00000001419523D4
  157. .text:00000001419523D4                                   loc_1419523D4:                          ; CODE XREF: GameCross+12B↑j
  158. .text:00000001419523D4                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  159. .text:00000001419523D4 000 89 51 FA                                      mov     [rcx-6], edx    ; jumptable 000000014195239B case 6
  160. .text:00000001419523D7
  161. .text:00000001419523D7                                   loc_1419523D7:                          ; CODE XREF: GameCross+12B↑j
  162. .text:00000001419523D7                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  163. .text:00000001419523D7 000 66 89 51 FE                                   mov     [rcx-2], dx     ; jumptable 000000014195239B case 2
  164. .text:00000001419523DB 000 C3                                            retn
  165. .text:00000001419523DC                                   ; ---------------------------------------------------------------------------
  166. .text:00000001419523DC
  167. .text:00000001419523DC                                   loc_1419523DC:                          ; CODE XREF: GameCross+12B↑j
  168. .text:00000001419523DC                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  169. .text:00000001419523DC 000 48 89 10                                      mov     [rax], rdx      ; jumptable 000000014195239B case 8
  170. .text:00000001419523DF 000 C3                                            retn
  171. .text:00000001419523E0                                   ; ---------------------------------------------------------------------------
  172. .text:00000001419523E0
  173. .text:00000001419523E0                                   loc_1419523E0:                          ; CODE XREF: GameCross+12B↑j
  174. .text:00000001419523E0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  175. .text:00000001419523E0 000 48 89 10                                      mov     [rax], rdx      ; jumptable 000000014195239B case 11
  176. .text:00000001419523E3 000 66 89 50 08                                   mov     [rax+8], dx
  177. .text:00000001419523E7 000 88 50 0A                                      mov     [rax+0Ah], dl
  178. .text:00000001419523EA 000 C3                                            retn
  179. .text:00000001419523EA                                   ; ---------------------------------------------------------------------------
  180. .text:00000001419523EB 000 0F 1F 44 00 00                                align 10h
  181. .text:00000001419523F0
  182. .text:00000001419523F0                                   loc_1419523F0:                          ; CODE XREF: GameCross+12B↑j
  183. .text:00000001419523F0                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  184. .text:00000001419523F0 000 48 89 10                                      mov     [rax], rdx      ; jumptable 000000014195239B case 10
  185. .text:00000001419523F3 000 66 89 50 08                                   mov     [rax+8], dx
  186. .text:00000001419523F7 000 C3                                            retn
  187. .text:00000001419523F8                                   ; ---------------------------------------------------------------------------
  188. .text:00000001419523F8
  189. .text:00000001419523F8                                   loc_1419523F8:                          ; CODE XREF: GameCross+12B↑j
  190. .text:00000001419523F8                                                                           ; DATA XREF: _RDATA:jpt_14195239B↓o
  191. .text:00000001419523F8 000 48 89 10                                      mov     [rax], rdx      ; jumptable 000000014195239B case 16
  192. .text:00000001419523FB 000 48 89 50 08                                   mov     [rax+8], rdx
  193. .text:00000001419523FF 000 C3                                            retn
  194. .text:00000001419523FF                                   GameCross       endp
  195. .text:00000001419523FF
  196. .text:00000001419523FF                                   ; ---------------------
  197.  
  198. __int64 __fastcall GameCross(__int64 a1, unsigned __int8 a2, unsigned __int64 a3)
  199. {
  200.   __m128 v4; // xmm0
  201.   char *v5; // r8
  202.   float *v6; // rcx
  203.   unsigned __int64 v7; // r9
  204.   unsigned __int64 i; // r9
  205.   unsigned __int64 v9; // r8
  206.   __int64 result; // rax
  207.   __int64 v11; // rdx
  208.  
  209.   v11 = 0x101010101010101i64 * a2;
  210.   v6 = (float *)(a3 + a1);
  211.   result = a1;
  212.   switch ( a3 )
  213.   {
  214.     case 0ui64:
  215.       return result;
  216.     case 1ui64:
  217.       goto LABEL_19;
  218.     case 2ui64:
  219.       goto LABEL_27;
  220.     case 3ui64:
  221.       goto LABEL_18;
  222.     case 4ui64:
  223.       goto LABEL_21;
  224.     case 5ui64:
  225.       goto LABEL_24;
  226.     case 6ui64:
  227.       goto LABEL_26;
  228.     case 7ui64:
  229.       goto LABEL_17;
  230.     case 8ui64:
  231.       *(_QWORD *)a1 = v11;
  232.       return result;
  233.     case 9ui64:
  234.       *(_QWORD *)((char *)v6 - 9) = v11;
  235.       *((_BYTE *)v6 - 1) = v11;
  236.       return result;
  237.     case 0xAui64:
  238.       *(_QWORD *)a1 = v11;
  239.       *(_WORD *)(a1 + 8) = v11;
  240.       return result;
  241.     case 0xBui64:
  242.       *(_QWORD *)a1 = v11;
  243.       *(_WORD *)(a1 + 8) = v11;
  244.       *(_BYTE *)(a1 + 10) = v11;
  245.       return result;
  246.     case 0xCui64:
  247.       *(_QWORD *)(v6 - 3) = v11;
  248. LABEL_21:
  249.       *((_DWORD *)v6 - 1) = v11;
  250.       return result;
  251.     case 0xDui64:
  252.       *(_QWORD *)((char *)v6 - 13) = v11;
  253. LABEL_24:
  254.       *(_DWORD *)((char *)v6 - 5) = v11;
  255.       *((_BYTE *)v6 - 1) = v11;
  256.       return result;
  257.     case 0xEui64:
  258.       *(_QWORD *)((char *)v6 - 14) = v11;
  259. LABEL_26:
  260.       *(_DWORD *)((char *)v6 - 6) = v11;
  261. LABEL_27:
  262.       *((_WORD *)v6 - 1) = v11;
  263.       return result;
  264.     case 0xFui64:
  265.       *(_QWORD *)((char *)v6 - 15) = v11;
  266. LABEL_17:
  267.       *(_DWORD *)((char *)v6 - 7) = v11;
  268. LABEL_18:
  269.       *(_WORD *)((char *)v6 - 3) = v11;
  270. LABEL_19:
  271.       *((_BYTE *)v6 - 1) = v11;
  272.       return result;
  273.     case 0x10ui64:
  274.       *(_QWORD *)a1 = v11;
  275.       *(_QWORD *)(a1 + 8) = v11;
  276.       return result;
  277.     default:
  278.       v4 = (__m128)_mm_unpacklo_epi8((__m128i)0x140000000ui64, (__m128i)0x140000000ui64);
  279.       if ( a3 <= 0x80 )
  280.         goto LABEL_8;
  281.       if ( (dword_14205C190 & 2) != 0 )
  282.         return sub_141952250(v6, v11);
  283.       *(__m128 *)v6 = v4;
  284.       v5 = (char *)v6 + a3;
  285.       v6 = (float *)((unsigned __int64)(v6 + 4) & 0xFFFFFFFFFFFFFFF0ui64);
  286.       a3 = v5 - (char *)v6;
  287.       v7 = a3 >> 7;
  288.       if ( a3 >> 7 )
  289.       {
  290.         if ( v7 > qword_141CD05B0 )
  291.         {
  292.           do
  293.           {
  294.             _mm_stream_ps(v6, v4);
  295.             _mm_stream_ps(v6 + 4, v4);
  296.             v6 += 32;
  297.             _mm_stream_ps(v6 - 24, v4);
  298.             _mm_stream_ps(v6 - 20, v4);
  299.             --v7;
  300.             _mm_stream_ps(v6 - 16, v4);
  301.             _mm_stream_ps(v6 - 12, v4);
  302.             _mm_stream_ps(v6 - 8, v4);
  303.             _mm_stream_ps(v6 - 4, v4);
  304.           }
  305.           while ( v7 );
  306.           _mm_sfence();
  307.           a3 &= 0x7Fu;
  308.         }
  309.         else
  310.         {
  311.           do
  312.           {
  313.             *(__m128 *)v6 = v4;
  314.             *((__m128 *)v6 + 1) = v4;
  315.             v6 += 32;
  316.             *((__m128 *)v6 - 6) = v4;
  317.             *((__m128 *)v6 - 5) = v4;
  318.             --v7;
  319.             *((__m128 *)v6 - 4) = v4;
  320.             *((__m128 *)v6 - 3) = v4;
  321.             *((__m128 *)v6 - 2) = v4;
  322.             *((__m128 *)v6 - 1) = v4;
  323.           }
  324.           while ( v7 );
  325.           a3 &= 0x7Fu;
  326.         }
  327.       }
  328. LABEL_8:
  329.       for ( i = a3 >> 4; i; --i )
  330.       {
  331.         *(__m128 *)v6 = v4;
  332.         v6 += 4;
  333.       }
  334.       v9 = a3 & 0xF;
  335.       if ( v9 )
  336.         *(__m128 *)((char *)v6 + v9 - 16) = v4;
  337.       return a1;
  338.   }
  339. }
Add Comment
Please, Sign In to add comment