-
Notifications
You must be signed in to change notification settings - Fork 45
/
test_avx2.asm
267 lines (226 loc) · 5.24 KB
/
test_avx2.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
format PE64 console 5.0
entry start
MEM_LARGE_PAGES = 20000000h
include 'win64a.inc'
include 'params.inc'
include 'struct_eh.inc'
include 'macro_eh.asm'
section '.text' code readable executable
start:
mov eax, esp
cmp rax, rsp
jne _Exit
sub esp, 0x108
and esp, -32
frame
call [GetCurrentThread]
mov rcx, rax
mov edx, 1
call [SetThreadAffinityMask]
call [GetCurrentProcess]
mov rcx, rax
mov edx, 0x28 ;TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY
lea r8d, [rsp+0x50]
call [OpenProcessToken]
xor ecx, ecx
mov edx, szSeLMP
lea r8d, [rsp+0x60]
call [LookupPrivilegeValue]
mov dword [rsp+0x5C], 1
mov dword [rsp+0x68], 2 ;SE_PRIVILEGE_ENABLED
mov rcx, [rsp+0x50] ;TokenHandle
xor edx, edx ;DisableAllPrivileges
lea r8d, [rsp+0x5C] ;NewState
xor r9d, r9d ;BufferLength
xor eax, eax
mov qword [rsp+0x20], rax ;PreviousState
mov qword [rsp+0x28], rax ;ReturnLength
call [AdjustTokenPrivileges]
xor ecx, ecx
mov edx, (sizeof.EH+0x1fffff) and -0x200000
mov r8d, MEM_RESERVE + MEM_COMMIT + MEM_LARGE_PAGES
mov r9d, PAGE_READWRITE
call [VirtualAlloc]
test rax, rax
jnz _MemAllocOK
mov ecx, szLargePageFailed
call [puts]
xor ecx, ecx
mov edx, sizeof.EH
mov r8d, MEM_RESERVE + MEM_COMMIT
mov r9d, PAGE_READWRITE
call [VirtualAlloc]
test rax, rax
jnz _MemAllocOK
mov ecx, szMemAllocFailed
call [puts]
jmp _Exit
_MemAllocOK:
mov [hMem1], rax
mov rdi, [hMem1]
lea rsi, [rdi+sizeof.EH]
xor eax, eax
_LoopPrimePageTable:
mov [rdi], eax
add rdi, 4096
cmp rdi, rsi
jb _LoopPrimePageTable
lea rcx, [rsp+0x78]
call [QueryPerformanceFrequency]
mov ecx, fmtqpcfreq
mov rdx, [rsp+0x78]
call [printf]
mov ecx, szRunning
call [puts]
lea rcx, [rsp+0x80]
call [QueryPerformanceCounter]
rdtsc
shl rdx, 32
or rax, rdx
mov [rsp+0x88], rax
mov rcx, [hMem1]
mov edx, t1
call _ProcEhPrepare
mov rcx, [hMem1]
mov edx, dword [t1+136]
;add edx, 17
call _ProcEhSolver
mov ebx, eax
lea rcx, [rsp+0x90]
call [QueryPerformanceCounter]
rdtsc
shl rdx, 32
or rax, rdx
mov [rsp+0x98], rax
;
mov rbp, [hMem1]
mov ecx, fmttimingblake
mov rdx, [rbp+EH.debug+8]
sub rdx, [rbp+EH.debug]
call [printf]
if 1
lea rsi, [rbp+EH.debug+16]
mov r12, [rbp+EH.debug+8]
mov edi, 1
_LoopPrintStageTiming:
mov r9, [rsi]
mov rax, r12
mov r12, r9
sub r9, rax
mov r8d, [rsi+8]
mov ecx, fmttimingstage
mov edx, edi
call [printf]
add rsi, 16
add edi, 1
cmp edi, 10
jb _LoopPrintStageTiming
end if
mov ecx, fmtsolution1
mov edx, dword [rbp+EH.bucket0ptr]
call [printf]
mov ecx, fmttimingremdup
mov rdx, [rsi]
sub rdx, r12
call [printf]
mov ecx, fmtsolution2
mov edx, ebx
call [printf]
;
mov rax, [rsp+0x78]
xor edx, edx
mov ecx, 1000
div rcx
mov [rsp+0x70], rax
mov rax, [rsp+0x90]
sub rax, [rsp+0x80]
jz _DeltaTimeZero
mov [rsp+0x20], rax
xor edx, edx
div qword [rsp+0x70]
mov rdx, rax
mov ecx, fmtTime
call [printf]
;rdtsc*qpf/qpc
mov rax, [rsp+0x98]
sub rax, [rsp+0x88]
mul qword [rsp+0x78]
div qword [rsp+0x20]
mov ecx, fmtrdtscmeasured
mov rdx, rax
call [printf]
_DeltaTimeZero:
mov rbp, [hMem1]
if 1
mov rbp, [hMem1]
mov ecx, szoutfile ;lpFileName
mov edx, GENERIC_WRITE ;dwDesiredAccess
mov r8d, 3 ;dwShareMode
xor r9d, r9d ;lpSecurityAttributes
mov eax, CREATE_ALWAYS
mov [rsp+0x20], rax ;dwCreationDisposition
xor eax, eax
mov [rsp+0x28], rax ;dwFlagsAndAttributes
mov [rsp+0x30], rax ;hTemplateFile
call [CreateFile]
mov [rsp+0x30], rax
mov rcx, [rsp+0x30] ;hFile
;mov rdx, [hMem1] ;lpBuffer
lea rdx, [rbp+EH.hashtab+1344*2]
;lea rdx, [rbp+EH.hashtab]
mov r8d, 1344 ;nNumberOfBytesToWrite
;mov r8d, 1344*4
lea r9d, [rsp+0x38] ;lpNumberOfBytesWritten
xor eax, eax
mov [rsp+0x20], rax ;lpOverlapped
call [WriteFile]
mov rcx, [rsp+0x30] ;hFile
call [CloseHandle]
end if
mov rcx, [hMem1]
xor edx, edx
mov r8d, MEM_RELEASE ;0x8000
call [VirtualFree]
_Exit:
xor ecx, ecx
call [ExitProcess]
align 64
include "proc_ehprepare_avx2.asm"
include "proc_ehsolver_avx2.asm"
endf
section '.data' data readable writeable
fmtdn db "%d", 0Dh, 0Ah, 0
fmtxn db "%x", 0Dh, 0Ah, 0
fmtllxn db "%016llx", 0Dh, 0Ah, 0
fmtqpcfreq db "QueryPerformanceCounter frequency: %lld Hz", 0Dh, 0Ah, 0
fmtrdtscmeasured db "Measured rdtsc frequency: %lld Hz", 0Dh, 0Ah, 0
fmttimingblake db "BLAKE2b rdtsc: %lld", 0Dh, 0Ah, 0
fmttimingstage db "Stage %d, Output pairs %d, rdtsc: %lld", 0Dh, 0Ah, 0
fmtsolution1 db "Number of solutions before duplicate removal: %d", 0Dh, 0Ah, 0
fmttimingremdup db "Duplicate removal and tree expand rdtsc: %lld", 0Dh, 0Ah, 0
fmtsolution2 db "Solutions found: %d", 0Dh, 0Ah, 0
fmtTime db "Time: %d ms", 0Dh, 0Ah, 0
szRunning db "Running solver...", 0
szSeLMP db "SeLockMemoryPrivilege",0
szLargePageFailed db "Failed to allocate Large Page, performance may be affected", 0
szMemAllocFailed db "Failed to allocate memory", 0
szoutfile db "out.bin", 0
align 64
include "data_blake2b.asm"
align 64
t1 file "t2.bin"
align 64
hMem1 rq 1
align 64
buf0 rb 512
section '.idata' import data readable writeable
library kernel32,'kernel32.dll',\
user32,'user32.dll',\
msvcrt,'msvcrt.dll',\
advapi32,'advapi32.dll'
include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\advapi32.inc'
import msvcrt,\
printf,'printf',\
puts,'puts'