|
发表于 2023-7-7 07:12:54
|
显示全部楼层
alloc(Signature,4) registersymbol(debugnr) registersymbol(exceptioncount) registersymbol(exceptionhandler) registersymbol(vehid) alloc(MREW,8) alloc(exceptioncount,4) alloc(debugnr,4) alloc(vehid,8) alloc(List,8) alloc(ListSize,8) alloc(ExceptionHandler,1024) alloc(SetList,1024) alloc(registereh,128) label(next) label(nomatch) label(match) label(ExceptionHandler_exit) Signature: db 'AAEH' MREW: dq 0 List: dq 0 ListSize: dd 0 SetList: sub rsp,28 mov [rsp+30],rcx mov rcx,MREW call AcquireSRWLockExclusive mov rax,[rsp+30] mov r8,[rax] mov r9,[rax+8] mov [List],r8 mov [ListSize],r9 mov rcx,MREW call ReleaseSRWLockExclusive add rsp,28 ret ExceptionHandler: sub rsp,28 mov [rsp+30],rcx mov rcx,MREW call AcquireSRWLockShared cmp [List],0 je ExceptionHandler_exit mov rax,[rsp+30] mov rax,[rax+8] lea rax,[rax+f8] mov r8,[List] mov rcx,[ListSize] next: mov r9,[r8] mov r10,[r8+8] cmp dword [r8+10],1 jne exceptionhandlerentry cmp [rax],r9 je match exceptionhandlerentry: cmp [rax],r9 jb nomatch cmp [rax],r10 jb match nomatch: add r8,18 loop next xor rax,rax jmp ExceptionHandler_exit match: mov [rax],r10 mov eax,ffffffff ExceptionHandler_exit: mov [rsp+30],rax mov rcx,MREW call ReleaseSRWLockShared mov rax,[rsp+30] add rsp,28 ret registereh: sub rsp,28 mov rcx,1 mov rdx,ExceptionHandler call AddVectoredExceptionHandler mov [vehid],rax add rsp,28 ret createthreadandwait(registereh) |
|