Advertisement
Guest User

windows xp avx enabler

a guest
Apr 6th, 2021
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. use32
  2. org $47023C
  3.  
  4. Continue_46C54A equ $46C54A
  5. Continue_46C48F equ $46C48F
  6. AVXEnable equ $4760E5
  7. KiIpiGenericCall equ $42B034
  8.  
  9. macro LOAD_AX arg1
  10. {
  11. call GetPIC_EAX
  12. add eax, (arg1 - base1)
  13. }
  14.  
  15.  
  16. macro avxsave reg0 {
  17. VEXTRACTF128 [reg0+$120], ymm0,1
  18. VEXTRACTF128 [reg0+$130], ymm1,1
  19. VEXTRACTF128 [reg0+$140], ymm2,1
  20. VEXTRACTF128 [reg0+$150], ymm3,1
  21. VEXTRACTF128 [reg0+$160], ymm4,1
  22. VEXTRACTF128 [reg0+$170], ymm5,1
  23. VEXTRACTF128 [reg0+$180], ymm6,1
  24. VEXTRACTF128 [reg0+$190], ymm7,1
  25. }
  26.  
  27. macro avxload reg0 {
  28. VBROADCASTF128 ymm0, [reg0+$120]
  29. VBROADCASTF128 ymm1, [reg0+$130]
  30. VBROADCASTF128 ymm2, [reg0+$140]
  31. VBROADCASTF128 ymm3, [reg0+$150]
  32. VBROADCASTF128 ymm4, [reg0+$160]
  33. VBROADCASTF128 ymm5, [reg0+$170]
  34. VBROADCASTF128 ymm6, [reg0+$180]
  35. VBROADCASTF128 ymm7, [reg0+$190]
  36. }
  37.  
  38. Hook_427DA4: ;47023C
  39. jmp short Save_eax_427DA4
  40. Hook_5CE746: ;47023E
  41. jmp short Save_eax_5CE746
  42. Hook_46C542: ;470240
  43. jmp short Save_ecx_46C542
  44. Hook_46DDB7: ;470242
  45. jmp short Save_ecx_46DDB7
  46. Hook_46DF41: ;470244
  47. jmp short Save_ecx_46DF41
  48. Hook_46DF8D: ;470246
  49. jmp short Save_ecx_46DF8D
  50. Hook_46ED62: ;470248
  51. jmp short Save_ecx_46ED62
  52. Empty_Hook: ;47024A
  53. jmp short $
  54. Hook_42DBCE: ;47024C
  55. jmp short Load_eax_42DBCE
  56. Hook_46C488: ;47024E
  57. jmp short Load_ecx_46C488
  58. Hook_46DF51: ;470250
  59. jmp short Load_ecx_46DF51
  60. Init_Hook: ;470252
  61. jmp short Init
  62.  
  63. Save_eax_427DA4:
  64. Save_eax_427D61:
  65. mov eax, [ebp-$8]
  66. jmp Save_Eax
  67.  
  68. Save_eax_5CE746:
  69. mov eax, [ebp-$18]
  70. jmp Save_Eax
  71.  
  72. Save_ecx_46C542:
  73. call Save_Ecx
  74. jmp Continue_46C54A
  75.  
  76. Save_ecx_46DDB7:
  77. call Save_Ecx
  78. or ebx, $0A
  79. ret
  80.  
  81. Save_ecx_46DF41:
  82. call Save_Ecx
  83. mov byte [eax+$31], $0A
  84. ret
  85.  
  86. Save_ecx_46DF8D:
  87. call Save_Ecx
  88. mov ecx, [esp+$14+$4] ; +4 - orig stack
  89. ret
  90.  
  91. Save_ecx_46ED62:
  92. call Save_Ecx
  93. mov byte [edi+$31], $0A
  94. ret
  95.  
  96. Load_eax_42DBCE:
  97. mov cr0, ebx
  98. call Load_Eax
  99. ret
  100.  
  101. Load_ecx_46C488:
  102. call Load_Ecx
  103. jmp Continue_46C48F
  104.  
  105. Load_ecx_46DF51:
  106. call Load_Ecx
  107. mov edx, [ecx+$20C]
  108. ret
  109.  
  110.  
  111.  
  112.  
  113. Save_Eax:
  114. call check_avx
  115. jnz Save_Eax_part2
  116. fxsave [eax]
  117. ret
  118. ;Save_Eax part1
  119.  
  120. Init:
  121. ;eax = NumberProcessors
  122. mov [ebp-4], eax ; stolen bytes, ebp-4 = &NumberProcessors
  123.  
  124. push ebx
  125. push edi
  126.  
  127. call GetPIC_AVXEnable
  128. mov edi,eax
  129. xor eax,eax
  130. mov byte [edi],al
  131.  
  132. ; cpuid
  133. mov al, 1 ; fxn: get features
  134. cpuid
  135. bt ecx, 28 ; AVX support by CPU?
  136. jnc L1
  137.  
  138. xor ecx, ecx
  139. xor eax, eax
  140. mov al, $0d
  141. cpuid
  142. bt eax, 2 ; XCR0.AVX can be set to 1 ?
  143. jnc L1
  144.  
  145. lea eax, [ebp-4]
  146. push eax
  147. LOAD_AX EnableAvxPerCPU
  148. push eax
  149. call KiIpiGenericCall
  150. mov byte [edi], $1
  151.  
  152. L1:
  153. pop edi
  154. pop ebx
  155.  
  156. ;stolen bytes
  157. lea eax, [ebp-4]
  158. ret
  159. ;Init
  160.  
  161. Save_Eax_part2:
  162. fxsave [eax]
  163. avxsave eax
  164. ret
  165. ;Save_Eax_part2
  166.  
  167.  
  168.  
  169. GetPIC_EAX:
  170. call $+5
  171. base1:
  172. pop eax
  173. ret
  174. ;GetPIC_EAX
  175.  
  176.  
  177. GetPIC_AVXEnable:
  178. LOAD_AX AVXEnable
  179. ret
  180. ;GetPIC_AVXEnable
  181.  
  182.  
  183. Save_Ecx:
  184. push eax
  185. mov eax, ecx
  186. call Save_Eax
  187. pop eax
  188. ret
  189. ;Save_Ecx
  190.  
  191.  
  192. Load_Ecx:
  193. push eax
  194. mov eax, ecx
  195. call Load_Eax
  196. pop eax
  197. ret
  198. ;Load_Ecx
  199.  
  200.  
  201. Load_Eax:
  202. call check_avx
  203. jz L3
  204. avxload eax
  205. L3:
  206. fxrstor [eax]
  207. ret
  208. ;Load_Eax
  209.  
  210.  
  211. check_avx:
  212. push eax
  213. call GetPIC_AVXEnable
  214. test byte [eax],$01
  215. pop eax
  216. ret
  217. ;check_avx
  218.  
  219.  
  220. EnableAvxPerCPU:
  221. ; cr4.osxsave
  222. mov eax, cr4 ; load cr4
  223. or eax, $00040000 ; set bit 18 OSXSAVE
  224. mov cr4, eax ; write new content
  225. ; XCR0.FPU+SSE+AVX
  226. xor ecx, ecx ; XFEATURE_ENABLED_MASK register
  227. xor edx, edx
  228. xor eax, eax
  229. mov al , $7 ; mask in edx:eax, fpu+sse+avx
  230. xsetbv
  231. ret 4
  232. ;EnableAvxPerCPU
  233.  
  234.  
  235.  
  236. EndAdress:
  237. db ($470400 - $) dup 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement