Function at 0x14009a730
Capabilities:
Log keystrokes via input method manager

Disassembly:
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
lea rbp, [rsp - 0xb8]
sub rsp, 0x1b8
mov rbx, r8
mov rdi, rdx
mov r15, rcx
mov dword [rbp - 0x60], 1
lea rdx, str.JREditCtrl::OnIMEComposition
lea rcx, [rbp - 0x58]
call fcn.14000a4d0
nop
mov byte [rbp - 0x50], 1
lea rax, vtable.JRTimer.0
mov qword [rbp - 0x48], rax
xor eax, eax
mov qword [rbp - 0x40], rax
lea rcx, [rbp - 0x48]
call fcn.1400477f0
mov dword [rbp - 0x38], 0x8a33f231
xor r12d, r12d
cmp byte [rbp - 0x50], r12b
je 0x14009a7d6
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009a7dd
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009a7d6
mov r10, qword [rax]
mov dword [rsp + 0x28], r12d
mov qword [rsp + 0x20], r12
lea r9, str.Start
mov r8, qword [rbp - 0x58]
mov edx, dword [rbp - 0x60]
mov rcx, rax
call qword [r10 + 0x10]
mov rcx, qword [0x14022a428]
mov dword [rbp - 0x20], r12d
movaps xmm0, xmmword [rbp - 0x20]
movdqa xmmword [rbp + 0x90], xmm0
mov dword [rbp - 0x20], r12d
movaps xmm1, xmmword [rbp - 0x20]
movdqa xmmword [rbp + 0x80], xmm1
mov dword [rbp + 0x30], 4
mov qword [rbp + 0x38], rbx
movaps xmm0, xmmword [rbp + 0x30]
movdqa xmmword [rbp + 0x70], xmm0
mov dword [rbp - 0x20], 4
mov qword [rbp - 0x18], rdi
movaps xmm0, xmmword [rbp - 0x20]
movdqa xmmword [rbp + 0x60], xmm0
test rcx, rcx
je 0x14009a886
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009a886
lea rcx, [rbp + 0x60]
mov qword [rbp + 0x40], rcx
lea rcx, [rbp + 0x70]
mov qword [rbp + 0x48], rcx
lea rcx, [rbp + 0x80]
mov qword [rbp + 0x50], rcx
lea rcx, [rbp + 0x90]
mov qword [rbp + 0x58], rcx
mov r10, qword [rax]
mov dword [rsp + 0x28], 4
lea rcx, [rbp + 0x40]
mov qword [rsp + 0x20], rcx
lea r9, str._I64d__0x_x
mov r8, qword [rbp - 0x58]
mov edx, dword [rbp - 0x60]
mov rcx, rax
call qword [r10 + reloc.OLEAUT32.dll_VariantClear]
mov rax, qword [r15]
xor r8d, r8d
lea rdx, [rbp - 0x10]
mov rcx, r15
call qword [rax + 0x538]
nop
mov rcx, qword [rax + 8]
mov rax, qword [rcx]
call qword [rax + 0x300]
mov rdi, rax
lea r14, vtable.JRWndPtr.0
mov qword [rbp - 0x10], r14
mov rcx, qword [rbp - 8]
test rcx, rcx
je 0x14009a8d6
cmp dword [rbp], 1
jne 0x14009a8d6
mov r8, qword [rcx]
lea rdx, [rbp - 0x10]
call qword [r8 + 0x608]
mov rcx, qword [rbp - 8]
cmp dword [rbp], 2
jne 0x14009a8f0
test rcx, rcx
je 0x14009a8f0
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
nop
test rdi, rdi
jne 0x14009a922
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
lea r9, str.host_window_invlid.__Returning_false
jmp 0x14009aa54
bt rbx, 0xb
jae 0x14009ac49
mov rax, qword [r15]
xor r8d, r8d
lea rdx, [rsp + 0x70]
mov rcx, r15
call qword [rax + 0x538]
nop
mov rcx, qword [rax + 8]
mov rax, qword [rcx]
call qword [rax + 0x300]
mov rcx, rax
call qword [sym.imp.IMM32.dll_ImmGetContext]
mov rsi, rax
mov qword [rsp + 0x70], r14
mov rcx, qword [rsp + 0x78]
test rcx, rcx
je 0x14009a984
cmp dword [rbp - 0x80], 1
jne 0x14009a984
mov r8, qword [rcx]
lea rdx, [rsp + 0x70]
call qword [r8 + 0x608]
mov rcx, qword [rsp + 0x78]
cmp dword [rbp - 0x80], 2
jne 0x14009a99d
test rcx, rcx
je 0x14009a99d
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
mov dword [rbp - 0x80], r12d
mov qword [rsp + 0x78], r12
test rsi, rsi
jne 0x14009a9d5
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
lea r9, str.NULL_context
jmp 0x14009aa54
xor r9d, r9d
xor r8d, r8d
mov edx, 0x800
mov rcx, rsi
call qword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
lea edi, [rax + 2]
mov edx, edi
mov ecx, 0x42
call qword [sym.imp.KERNEL32.dll_GlobalAlloc]
mov rbx, rax
test rax, rax
jne 0x14009aa23
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
lea r9, str.Failed_to_allocate_memory
jmp 0x14009aa54
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_GlobalLock]
mov r14, rax
test rax, rax
jne 0x14009aa91
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
lea r9, str.Failed_to_lock_memory
mov dword [rsp + 0x28], r12d
mov qword [rsp + 0x20], r12
mov r10, qword [rax]
mov r8, qword [rbp - 0x58]
mov edx, dword [rbp - 0x60]
mov rcx, rax
call qword [r10 + reloc.OLEAUT32.dll_VariantClear]
xor bl, bl
lea rcx, [rbp - 0x60]
call fcn.14005d290
movzx eax, bl
add rsp, 0x1b8
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret
mov r9d, edi
mov r8, r14
mov edx, 0x800
mov rcx, rsi
call qword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
mov rax, qword [r15]
xor r8d, r8d
lea rdx, [rbp - 0x78]
mov rcx, r15
call qword [rax + 0x538]
nop
mov rcx, qword [rax + 8]
mov rax, qword [rcx]
call qword [rax + 0x300]
mov rcx, rax
mov rdx, rsi
call qword [sym.imp.IMM32.dll_ImmReleaseContext]
nop
lea rax, vtable.JRWndPtr.0
mov qword [rbp - 0x78], rax
mov rcx, qword [rbp - 0x70]
test rcx, rcx
je 0x14009aafe
cmp dword [rbp - 0x68], 1
jne 0x14009aafe
mov rax, qword [rcx]
lea rdx, [rbp - 0x78]
call qword [rax + 0x608]
mov rcx, qword [rbp - 0x70]
cmp dword [rbp - 0x68], 2
jne 0x14009ab17
test rcx, rcx
je 0x14009ab17
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
mov dword [rbp - 0x68], r12d
mov qword [rbp - 0x70], r12
cmp dword [0x14021c658], 0xb23a8c33
je 0x14009ab5a
mov ecx, 0x6c0
call fcn.140111d34
mov qword [rbp + 0x100], rax
test rax, rax
je 0x14009ab4e
mov rcx, rax
call fcn.140036570
mov rcx, rax
jmp 0x14009ab51
mov rcx, r12
mov qword [0x140229e08], rcx
jmp 0x14009ab61
mov rcx, qword [0x140229e08]
mov rax, qword [rcx]
mov byte [rsp + 0x30], 1
mov byte [rsp + 0x28], 0
mov byte [rsp + 0x20], 0
mov r12d, 0xffffffff
mov r9d, r12d
mov r8d, r12d
mov rdx, r14
call qword [rax + 0x28]
mov rdi, rax
mov qword [rbp + 0x108], rax
lea rdx, [rbp + 0x108]
lea rcx, [rbp + 0x110]
call fcn.14000a560
lea rcx, [r15 + 0x1e8]
xor esi, esi
mov dword [rsp + 0x20], esi
xor r9d, r9d
xor r8d, r8d
mov rdx, rax
call fcn.140095540
mov rcx, qword [r15 + 0x558]
test rcx, rcx
je 0x14009ac03
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x3e0]
mov rcx, qword [r15 + 0x558]
mov rax, qword [rcx]
call qword [rax + 0x388]
mov rcx, qword [r15 + 0x558]
test rcx, rcx
je 0x14009ac03
mov rax, qword [rcx]
lea edx, [rsi + 1]
call qword [rax + 0x2e8]
mov qword [r15 + 0x558], rsi
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_GlobalUnlock]
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_GlobalFree]
nop
lea rdx, [rdi - 0x18]
mov eax, dword [rdx + 0x10]
cmp eax, 0x7ffffc17
je 0x14009ac42
mov eax, dword [rdx + 0x10]
cmp eax, 0xffffffff
je 0x14009ac38
lock xadd dword [rdx + 0x10], r12d
sub r12d, 1
jg 0x14009ac42
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov bl, 1
jmp 0x14009aa71
test bl, 8
je 0x14009aa6f
mov rcx, qword [r15 + 0x558]
test rcx, rcx
je 0x14009ac9a
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x3e0]
mov rcx, qword [r15 + 0x558]
mov rax, qword [rcx]
call qword [rax + 0x388]
mov rcx, qword [r15 + 0x558]
test rcx, rcx
je 0x14009ac9a
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
mov qword [r15 + 0x558], r12
mov rax, qword [r15]
xor r8d, r8d
lea rdx, [rbp - 0x78]
mov rcx, r15
call qword [rax + 0x538]
nop
mov rcx, qword [rax + 8]
mov rax, qword [rcx]
call qword [rax + 0x300]
mov rcx, rax
call qword [sym.imp.IMM32.dll_ImmGetContext]
mov rdi, rax
mov qword [rbp - 0x78], r14
mov rcx, qword [rbp - 0x70]
test rcx, rcx
je 0x14009acec
cmp dword [rbp - 0x68], 1
jne 0x14009acec
mov r8, qword [rcx]
lea rdx, [rbp - 0x78]
call qword [r8 + 0x608]
mov rcx, qword [rbp - 0x70]
cmp dword [rbp - 0x68], 2
jne 0x14009ad05
test rcx, rcx
je 0x14009ad05
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
mov dword [rbp - 0x68], r12d
mov qword [rbp - 0x70], r12
test rdi, rdi
jne 0x14009ad4c
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
mov r10, qword [rax]
mov dword [rsp + 0x28], r12d
mov qword [rsp + 0x20], r12
lea r9, str.NULL_context
jmp 0x14009aa61
xor r9d, r9d
xor r8d, r8d
lea edx, [r9 + 8]
mov rcx, rdi
call qword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
lea ebx, [rax + 2]
mov edx, ebx
mov ecx, 0x42
call qword [sym.imp.KERNEL32.dll_GlobalAlloc]
mov r13, rax
test rax, rax
jne 0x14009adb1
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
mov r10, qword [rax]
mov dword [rsp + 0x28], r12d
mov qword [rsp + 0x20], r12
lea r9, str.Failed_to_allocate_memory
jmp 0x14009aa61
mov rcx, r13
call qword [sym.imp.KERNEL32.dll_GlobalLock]
mov rsi, rax
test rax, rax
jne 0x14009adfc
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009aa6f
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009aa6f
mov r10, qword [rax]
mov dword [rsp + 0x28], r12d
mov qword [rsp + 0x20], r12
lea r9, str.Failed_to_lock_memory
jmp 0x14009aa61
mov r9d, ebx
mov r8, rsi
mov edx, 8
mov rcx, rdi
call qword [sym.imp.IMM32.dll_ImmGetCompositionStringW]
mov rax, qword [r15]
xor r8d, r8d
lea rdx, [rsp + 0x70]
mov rcx, r15
call qword [rax + 0x538]
nop
mov rcx, qword [rax + 8]
mov rax, qword [rcx]
call qword [rax + 0x300]
mov rcx, rax
mov rdx, rdi
call qword [sym.imp.IMM32.dll_ImmReleaseContext]
nop
mov qword [rsp + 0x70], r14
mov rcx, qword [rsp + 0x78]
test rcx, rcx
je 0x14009ae67
cmp dword [rbp - 0x80], 1
jne 0x14009ae67
mov rax, qword [rcx]
lea rdx, [rsp + 0x70]
call qword [rax + 0x608]
mov rcx, qword [rsp + 0x78]
cmp dword [rbp - 0x80], 2
jne 0x14009ae80
test rcx, rcx
je 0x14009ae80
mov rax, qword [rcx]
mov edx, 1
call qword [rax + 0x2e8]
mov dword [rbp - 0x80], r12d
mov qword [rsp + 0x78], r12
cmp dword [0x14021c658], 0xb23a8c33
je 0x14009aec4
mov ecx, 0x6c0
call fcn.140111d34
mov qword [rbp + 0x100], rax
test rax, rax
je 0x14009aeb8
mov rcx, rax
call fcn.140036570
mov rcx, rax
jmp 0x14009aebb
mov rcx, r12
mov qword [0x140229e08], rcx
jmp 0x14009aecb
mov rcx, qword [0x140229e08]
mov rax, qword [rcx]
mov byte [rsp + 0x30], 1
mov byte [rsp + 0x28], 0
mov byte [rsp + 0x20], 0
mov r12d, 0xffffffff
mov r9d, r12d
mov r8d, r12d
mov rdx, rsi
call qword [rax + 0x28]
mov rbx, rax
mov qword [rbp + 0x100], rax
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009af31
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009af31
mov r10, qword [rax]
xor ecx, ecx
mov dword [rsp + 0x28], ecx
mov qword [rsp + 0x20], rcx
mov r9, rbx
mov r8, qword [rbp - 0x58]
mov edx, dword [rbp - 0x60]
mov rcx, rax
call qword [r10 + reloc.OLEAUT32.dll_VariantClear]
movups xmm0, xmmword [r15 + 0x380]
movaps xmmword [rsp + 0x60], xmm0
mov rax, qword [r15]
lea rdx, [rsp + 0x60]
mov rcx, r15
call qword [rax + 0x4b8]
call fcn.1400761c0
neg eax
mov ecx, dword [rsp + 0x64]
lea eax, [rcx + rax*2]
mov dword [rsp + 0x64], eax
call fcn.1400761c0
mov ecx, dword [rsp + 0x64]
add eax, ecx
sub dword [rsp + 0x60], 6
add dword [rsp + 0x68], 6
sub ecx, 6
mov dword [rsp + 0x64], ecx
add eax, 6
mov dword [rsp + 0x6c], eax
call fcn.140045d50
mov rdi, rax
call fcn.140045d50
mov rsi, rax
mov r14, qword [rax]
mov rdx, qword [rdi]
mov rcx, rdi
call qword [rdx + 0x30]
mov r9, rax
mov dword [rsp + 0x28], 0x7fffffff
mov dword [rsp + 0x20], 0
mov r8, rbx
lea rdx, [rbp + 0x108]
mov rcx, rsi
call qword [r14 + 0x58]
mov edi, dword [rax]
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009afe4
mov rax, qword [rcx]
mov dl, 1
call qword [rax + 0x98]
mov rcx, rax
xor esi, esi
jmp 0x14009afe8
xor esi, esi
mov ecx, esi
mov rax, qword [rcx]
mov dl, 1
call qword [rax + 0x20]
mov r9, qword [rax]
xor r8d, r8d
lea edx, [r8 + 0x64]
mov rcx, rax
call qword [r9 + 0x40]
cmp edi, eax
jge 0x14009b03f
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009b021
mov rax, qword [rcx]
mov dl, 1
call qword [rax + 0x98]
mov rcx, rax
jmp 0x14009b024
mov rcx, rsi
mov rax, qword [rcx]
mov dl, 1
call qword [rax + 0x20]
mov r9, qword [rax]
xor r8d, r8d
lea edx, [r8 + 0x64]
mov rcx, rax
call qword [r9 + 0x40]
mov edi, eax
lea ecx, [rdi + rdi*2]
shl ecx, 2
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
add edx, dword [rsp + 0x60]
mov dword [rsp + 0x68], edx
cmp qword [r15 + 0x558], 0
jne 0x14009b1d3
mov rcx, qword [0x14022a428]
test rcx, rcx
je 0x14009b0a6
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x50]
test rax, rax
je 0x14009b0a6
mov r10, qword [rax]
mov dword [rsp + 0x28], esi
mov qword [rsp + 0x20], rsi
lea r9, str.Creating_comp_window
mov r8, qword [rbp - 0x58]
mov edx, dword [rbp - 0x60]
mov rcx, rax
call qword [r10 + reloc.OLEAUT32.dll_VariantClear]
mov ecx, 0x270
call fcn.140111d34
mov rdi, rax
mov qword [rbp + 0x110], rax
test rax, rax
je 0x14009b0ef
mov rcx, rax
call fcn.14007ade0
nop
lea rax, vtable.JRIMECompositionWnd.0
mov qword [rdi], rax
lea rax, vtable.JRIMECompositionWnd.1.0
mov qword [rdi + 0x188], rax
lea rcx, [rdi + 0x268]
call fcn.14000a680
nop
jmp 0x14009b0f2
mov rdi, rsi
mov qword [r15 + 0x558], rdi
test rdi, rdi
je 0x14009b1c5
lea rdx, [rbp + 0x100]
lea rcx, [rbp + 0x118]
call fcn.14000a560
mov rbx, rax
mov qword [rbp - 0x30], rax
mov rcx, qword [r15 + 0x558]
add rcx, 0x268
mov rdx, rax
call fcn.140037020
nop
mov rdx, qword [rbx]
sub rdx, 0x18
mov eax, dword [rdx + 0x10]
cmp eax, 0x7ffffc17
je 0x14009b163
mov eax, dword [rdx + 0x10]
cmp eax, 0xffffffff
je 0x14009b159
mov eax, r12d
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14009b163
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
lea rax, vtable.JRWndPtr.0
mov qword [rbp + 0x10], rax
mov qword [rbp + 0x18], rsi
mov dword [rbp + 0x20], esi
movaps xmm0, xmmword [rsp + 0x60]
movdqa xmmword [rbp + 0xa0], xmm0
lea rax, [rbp + 0x10]
mov qword [rsp + 0x30], rax
lea rax, [rbp + 0xa0]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], 0x80000000
lea r9, [0x1401acff0]
lea r8, str.JRiver_IME_Composition_Wnd_Class
mov edx, 0x2a0
mov rcx, qword [r15 + 0x558]
call fcn.1400837d0
mov rbx, qword [rbp + 0x100]
cmp qword [r15 + 0x558], 0
je 0x14009b262
lea rdx, [rbp + 0x100]
lea rcx, [rbp + 8]
call fcn.14000a560
mov rbx, rax
mov qword [rbp - 0x30], rax
mov rcx, qword [r15 + 0x558]
add rcx, 0x268
mov rdx, rax
call fcn.140037020
nop
mov rdx, qword [rbx]
sub rdx, 0x18
mov eax, dword [rdx + 0x10]
cmp eax, 0x7ffffc17
je 0x14009b231
mov eax, dword [rdx + 0x10]
cmp eax, 0xffffffff
je 0x14009b227
mov eax, r12d
lock xadd dword [rdx + 0x10], eax
sub eax, 1
jg 0x14009b231
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [r15 + 0x558]
mov rax, qword [rcx]
xor r9d, r9d
xor r8d, r8d
xor edx, edx
call qword [rax + 0x508]
mov rcx, qword [r15 + 0x558]
mov rax, qword [rcx]
mov dl, 1
call qword [rax + 0x3e0]
mov rbx, qword [rbp + 0x100]
mov rcx, r13
call qword [sym.imp.KERNEL32.dll_GlobalUnlock]
mov rcx, r13
call qword [sym.imp.KERNEL32.dll_GlobalFree]
nop
lea rdx, [rbx - 0x18]
mov eax, dword [rdx + 0x10]
cmp eax, 0x7ffffc17
je 0x14009b2a1
mov eax, dword [rdx + 0x10]
cmp eax, 0xffffffff
je 0x14009b297
lock xadd dword [rdx + 0x10], r12d
sub r12d, 1
jg 0x14009b2a1
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov bl, 1
jmp 0x14009aa71