Function at 0x10056ba0
Capabilities:
Log keystrokes via polling

Disassembly:
mov eax, dword [esp + 0x14]
sub esp, 0x30
push ebx
push ebp
mov ebp, dword [esp + 0x50]
push esi
xor esi, esi
cmp eax, 0xffffffff
push edi
jne 0x10056bcf
cmp ebp, 0xffffffff
jne 0x10056bcf
lea eax, [esp + 0x18]
push eax
call fcn.10054e60
mov ebp, dword [esp + 0x1c]
mov eax, dword [esp + 0x18]
jmp 0x10056bd7
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], ebp
mov ecx, dword [esp + 0x48]
lea edx, [eax + ecx]
mov dword [esp + 0x20], eax
mov ebx, ebp
add ebx, dword [esp + 0x4c]
mov dword [esp + 0x20], edx
sub edx, eax
mov dword [esp + 0x54], eax
mov eax, edx
mov ecx, ebx
imul eax, edx
sub ecx, ebp
mov dword [esp + 0x10], edx
mov edx, ecx
imul edx, ecx
add eax, edx
mov dword [esp + 0x48], eax
mov dword [esp + 0x24], ebx
mov dword [esp + 0x4c], ecx
fild dword [esp + 0x48]
call fcn.10104b30
fst qword [esp + 0x28]
fld qword [0x1016ba00]
mov edi, dword [esp + 0x44]
fcom st(1)
fnstsw ax
test ah, 5
jp 0x10056d44
fild dword [esp + 0x4c]
mov dword [esp + 0x48], 0x5a
fdiv st(2)
fstp qword [esp + 0x38]
fild dword [esp + 0x10]
fdiv st(2)
fstp qword [esp + 0x30]
fcom st(1)
fnstsw ax
test ah, 5
jp 0x10056d44
fld qword [esp + 0x30]
fmul st(1)
fiadd dword [esp + 0x18]
call fcn.10104060
fmul qword [esp + 0x38]
mov dword [esp + 0x10], eax
fiadd dword [esp + 0x1c]
call fcn.10104060
mov ebx, eax
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x10]
sub eax, dword [esp + 0x54]
sub ebx, ebp
cmp dword [esp + 0x50], 0
mov dword [esp + 0x54], eax
mov dword [esp + 0x4c], 3
je 0x10056caa
mov dword [esp + 0x4c], 4
test eax, eax
mov byte [esi + edi], 8
jne 0x10056cb6
test ebx, ebx
je 0x10056cfd
mov ebp, dword [sym.imp.USER32.dll_GetAsyncKeyState]
fstp st(0)
push 1
call ebp
test ax, ax
je 0x10056ccb
or byte [esi + edi], 1
push 2
call ebp
test ax, ax
je 0x10056cd8
or byte [esi + edi], 2
push 4
call ebp
test ax, ax
je 0x10056ce5
or byte [esi + edi], 4
mov eax, dword [esp + 0x54]
fld qword [esp + 0x28]
test eax, eax
jge 0x10056cf5
or byte [esi + edi], 0x10
test ebx, ebx
jle 0x10056cfd
or byte [esi + edi], 0x20
mov byte [esi + edi + 1], al
mov eax, dword [esp + 0x50]
neg bl
cmp eax, 2
mov byte [esi + edi + 2], bl
je 0x10056d15
cmp eax, 1
jne 0x10056d1a
mov byte [esi + edi + 3], 0
add dword [esp + 0x48], 0x5a
fild dword [esp + 0x48]
mov eax, dword [esp + 0x10]
add esi, dword [esp + 0x4c]
mov ebp, dword [esp + 0x14]
fcom st(1)
mov dword [esp + 0x54], eax
fnstsw ax
test ah, 5
jnp 0x10056c5f
mov ebx, dword [esp + 0x24]
mov eax, dword [esp + 0x20]
fstp st(0)
sub eax, dword [esp + 0x54]
fstp st(0)
mov dword [esp + 0x54], eax
jne 0x10056d60
mov ecx, ebx
sub ecx, ebp
je 0x10056de7
sub ebx, ebp
cmp dword [esp + 0x50], 0
mov dword [esp + 0x48], 3
je 0x10056d79
mov dword [esp + 0x48], 4
test eax, eax
mov byte [esi + edi], 8
jne 0x10056d85
test ebx, ebx
je 0x10056dc6
mov ebp, dword [sym.imp.USER32.dll_GetAsyncKeyState]
push 1
call ebp
test ax, ax
je 0x10056d98
or byte [esi + edi], 1
push 2
call ebp
test ax, ax
je 0x10056da5
or byte [esi + edi], 2
push 4
call ebp
test ax, ax
je 0x10056db2
or byte [esi + edi], 4
mov eax, dword [esp + 0x54]
test eax, eax
jge 0x10056dbe
or byte [esi + edi], 0x10
test ebx, ebx
jle 0x10056dc6
or byte [esi + edi], 0x20
mov byte [esi + edi + 1], al
mov eax, dword [esp + 0x50]
neg bl
cmp eax, 2
mov byte [esi + edi + 2], bl
je 0x10056dde
cmp eax, 1
jne 0x10056de3
mov byte [esi + edi + 3], 0
add esi, dword [esp + 0x48]
pop edi
mov eax, esi
pop esi
pop ebp
pop ebx
add esp, 0x30
ret