Function at 0x50c830
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0x38
movups xmm1, xmmword [ebp + 8]
push esi
movq xmm0, qword [ebp + 0x18]
movq qword [esp + 0x2c], xmm0
movaps xmm0, xmm1
psrldq xmm0, 4
push edi
movd edi, xmm0
mov dword [esp + 0x14], ecx
movups xmmword [esp + 0x20], xmm1
cmp edi, 0x203
ja 0x50c899
cmp edi, 0x201
jae case.0x50c881.161
lea eax, [edi - 0xa1]
cmp eax, 0xc
ja case.0x50c8ab.522
movzx eax, byte [eax + 0x50ca8c]
jmp dword [eax*4 + 0x50ca78]
movaps xmm0, xmm1
psrldq xmm0, 8
movd eax, xmm0
or eax, 1
jmp 0x50c8e3
lea eax, [edi - 0x204]
cmp eax, 9
ja case.0x50c8ab.522
movzx eax, byte [eax + 0x50caac]
jmp dword [eax*4 + 0x50ca9c]
movaps xmm0, xmm1
psrldq xmm0, 8
movd eax, xmm0
or eax, 0x10
jmp 0x50c8e3
movaps xmm0, xmm1
psrldq xmm0, 8
movd eax, xmm0
or eax, 2
jmp 0x50c8e3
movaps xmm0, xmm1
psrldq xmm0, 8
movd eax, xmm0
or eax, 0x20
mov dword [esp + 0x28], eax
mov ecx, dword [esp + 0x24]
cmp edi, 0x2a2
je 0x50c90f
cmp ecx, 0x2a0
je 0x50c90f
cmp ecx, 0xa0
jb 0x50c90b
cmp ecx, 0xad
jbe 0x50c90f
xor edx, edx
jmp 0x50c914
mov edx, 0x20000
cmp ecx, 0x203
ja 0x50c93f
je case.0x50c938.163
lea eax, [ecx - 0xa3]
mov dword [esp + 0x10], edx
cmp eax, 0xa
ja case.0x50c938.164
movzx eax, byte [eax + 0x50cac0]
mov dword [esp + 0x10], edx
jmp dword [eax*4 + 0x50cab8]
mov eax, ecx
mov dword [esp + 0x10], edx
sub eax, 0x206
je case.0x50c938.163
sub eax, 3
je case.0x50c938.163
sub eax, 4
jne case.0x50c938.164
mov esi, edx
or esi, 0x10000
mov dword [esp + 0x10], esi
add ecx, 0xffffff5f
cmp ecx, 7
ja case.0x50c96d.163
jmp dword [ecx*4 + 0x50cacc]
mov esi, 0x10
jmp 0x50c9cc
mov esi, 0x20
jmp 0x50c9cc
mov esi, 0x40
jmp 0x50c9cc
movzx esi, word [esp + 0x28]
push 0x12
call dword [sym.imp.USER32.dll_GetKeyState]
movups xmm1, xmmword [ebp + 8]
xor edx, edx
mov ecx, 8
test ax, ax
mov eax, esi
cmovs edx, ecx
mov ecx, esi
and ecx, 2
and eax, 1
add ecx, ecx
or ecx, eax
mov eax, esi
shl ecx, 3
and eax, 0x10
or ecx, eax
shr esi, 1
add ecx, ecx
and esi, 6
or edx, ecx
or edx, esi
mov esi, edx
movq xmm0, qword [ebp + 0x18]
sub esp, 0x1c
mov ecx, dword [ebp + 0x20]
mov eax, esp
movups xmmword [eax], xmm1
movq qword [eax + 0x10], xmm0
mov dword [eax + 0x18], ecx
call fcn.0050c4a0
mov ecx, dword [esp + 0x30]
add esp, 0x1c
mov dword [ecx + 0x1c], eax
add ecx, 0x20
call fcn.004729c0
mov eax, dword [esp + 0x14]
or esi, dword [esp + 0x10]
mov ecx, dword [ebp + 0x20]
movups xmm0, xmmword [ebp + 8]
mov dword [eax + 0x28], esi
mov esi, eax
mov eax, dword [ebp + 0x1c]
movups xmmword [esi], xmm0
movq xmm0, qword [ebp + 0x18]
movq qword [esi + 0x10], xmm0
mov dword [esi + 0x18], ecx
mov dword [esi + 0x30], eax
mov dword [esi + 0x34], ecx
cmp edi, 0x2a2
je 0x50ca48
cmp edi, 0x2a0
je 0x50ca48
cmp edi, 0xa0
jb 0x50ca6e
cmp edi, 0xad
ja 0x50ca6e
mov dword [esp + 0x18], eax
mov eax, ecx
mov dword [esp + 0x1c], eax
lea eax, [esp + 0x18]
push eax
push dword [ebp + 8]
call dword [sym.imp.USER32.dll_ScreenToClient]
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x1c]
mov dword [esi + 0x30], eax
mov dword [esi + 0x34], ecx
pop edi
mov eax, esi
pop esi
mov esp, ebp
pop ebp
ret 0x1c
pop ecx
add byte [ecx], ah
add byte [eax], al
add byte [eax - 0x7f], dl
in al, dx
mov eax, 0x53000000
push esi
push edi
mov eax, dword [0x60f074]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov eax, ecx
mov dword [ebp - 0x14], eax
xor ebx, ebx
mov dword [ebp - 0x10], ebx
mov edi, dword [eax + 4]
test edi, edi
je 0x51cc89
mov dword [ebp - 4], 0xffffffff
cmp dword [0x61a268], 1
jne 0x51cc3d
cmp dword [0x61a250], 3
jg 0x51cc3d
cmp dword [edi], ebx
jne 0x51cc3d
push 3
push 0x78
push str.f:my_lab_tabexplorerextab_masterlibrary_base_timer.h
lea ecx, [ebp - 0xc4]
call fcn.0046c100
mov dword [ebp - 4], 2
lea ecx, [eax + 8]
mov ebx, 4
mov edx, str.Check_failed:_IsRunning__.
mov dword [ebp - 0x10], ebx
call fcn.00403840
mov dword [ebp - 4], 0xffffffff
test bl, 4
je 0x51cc54
lea ecx, [ebp - 0xc4]
call fcn.0046c520
mov esi, dword [edi]
push 0x18
call fcn.00550175
add esp, 4
mov dword [ebp - 0x10], eax
mov ecx, eax
push dword [esi + 0xc]
push dword [esi + 8]
push dword [esi + 0x14]
push dword [esi + 0x10]
call fcn.0051cca0
push eax
mov ecx, edi
call fcn.0047df20
mov eax, dword [ebp - 0x14]
mov ecx, dword [eax + 0x10]
mov eax, dword [eax + 0x14]
call eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret