Function at 0x14002176c
Capabilities:
Get file version info

Disassembly:
mov qword [rsp + 0x18], rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0xe0
mov rax, qword [0x140036138]
xor rax, rsp
mov qword [rsp + 0xd8], rax
mov rax, qword [0x140036100]
mov r13, rcx
lea rcx, [0x140036100]
mov r14, rdx
call qword [rax + 0x18]
xor r15d, r15d
lea rbx, [rax + 0x18]
lea rdx, [rsp + 0x50]
mov rcx, r14
mov rbp, r15
mov qword [rsp + 0x70], r15
mov qword [rsp + 0x48], r15
mov qword [rsp + 0x38], rbx
mov qword [rsp + 0x30], r15
call qword [sym.imp.ole32.dll_StringFromCLSID]
or r12, 0xffffffffffffffff
cmp eax, r15d
mov esi, eax
jl 0x140021ce3
mov rdx, qword [rsp + 0x50]
lea r8d, [r15 + 1]
cmp rdx, r15
jne 0x1400217fa
mov ecx, r15d
jmp 0x14002180b
xor eax, eax
mov rcx, r12
mov rdi, rdx
repne scasw ax, word [rdi]
not rcx
sub rcx, r8
mov r8d, ecx
lea rcx, [rsp + 0x38]
call fcn.14000cd0c
mov rcx, qword [rsp + 0x50]
call qword [sym.imp.ole32.dll_CoTaskMemFree]
mov rbx, qword [rsp + 0x38]
mov qword [rsp + 0x50], r15
cmp dword [rbx - 0x10], r15d
mov eax, 0x8007000e
cmove esi, eax
cmp esi, r15d
jl 0x140021ce3
xor edx, edx
lea rax, [rsp + 0x48]
lea r9, [0x1400063a0]
lea r8d, [rdx + 0x17]
lea rcx, [0x140002690]
mov qword [rsp + 0x20], rax
call qword [sym.imp.ole32.dll_CoCreateInstance]
cmp eax, r15d
mov esi, eax
jl 0x140021ce3
mov rcx, qword [rsp + 0x48]
lea rdx, [rsp + 0x40]
mov rax, qword [rcx]
call qword [rax + 0x38]
cmp eax, r15d
mov esi, eax
jl 0x140021ce3
cmp dword [rsp + 0x40], r15d
mov dil, r15b
mov r12d, r15d
jle 0x140021977
cmp dil, r15b
jne 0x14002197c
mov rcx, qword [rsp + 0x30]
cmp rcx, r15
je 0x1400218bb
mov qword [rsp + 0x30], r15
mov rax, qword [rcx]
call qword [rax + 0x10]
mov rcx, qword [rsp + 0x48]
lea r8, [rsp + 0x30]
mov edx, r12d
mov rax, qword [rcx]
call qword [rax + 0x50]
cmp eax, r15d
jl 0x140021964
mov rcx, qword [rsp + 0x30]
mov qword [rsp + 0x58], r15
cmp rcx, r15
je 0x140021964
mov rax, qword [rcx]
lea r8, [rsp + 0x58]
lea rdx, [0x140006390]
call qword [rax]
mov rcx, qword [rsp + 0x58]
cmp rcx, r15
je 0x140021964
mov rax, qword [rcx]
lea rdx, [rsp + 0xb0]
call qword [rax + 0x38]
cmp eax, r15d
jl 0x140021954
mov rcx, qword [rsp + 0xb0]
lea rdx, [rsp + 0xc8]
call qword [sym.imp.ole32.dll_CLSIDFromString]
cmp eax, r15d
jl 0x140021954
lea rcx, [rsp + 0xc8]
mov r8d, 0x10
mov rdx, r14
call sub.msvcrt.dll_memcmp
movzx edi, dil
cmp eax, r15d
mov eax, 1
cmove edi, eax
mov rcx, qword [rsp + 0x58]
cmp rcx, r15
je 0x140021964
mov rax, qword [rcx]
call qword [rax + 0x10]
inc r12d
cmp r12d, dword [rsp + 0x40]
jl 0x14002189d
cmp dil, r15b
jne 0x14002197c
mov esi, 0x80070057
cmp esi, r15d
jl 0x140021cdf
lea r8, [0x140006228]
lea rcx, [rsp + 0xb8]
mov rdx, rbx
call fcn.140021d90
mov rcx, r13
mov rdx, rax
call fcn.14000c5e0
mov rdx, qword [rsp + 0xb8]
add rdx, 0xffffffffffffffe8
or r12, 0xffffffffffffffff
mov eax, r12d
lock xadd dword [rdx + 0x10], eax
add eax, r12d
cmp eax, r15d
jg 0x1400219d0
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + 8]
mov rax, qword [r13]
cmp dword [rax - 0x10], r15d
jne 0x140021a23
mov rdx, qword [rsp + 0x38]
lea r8, [0x140006240]
lea rcx, [rsp + 0xc0]
call fcn.140021d90
mov rcx, r13
mov rdx, rax
call fcn.14000c5e0
mov rdx, qword [rsp + 0xc0]
mov eax, r12d
add rdx, 0xffffffffffffffe8
lock xadd dword [rdx + 0x10], eax
add eax, r12d
cmp eax, r15d
jg 0x140021a23
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + 8]
mov rax, qword [r13]
mov ecx, 0x8000ffff
cmp dword [rax - 0x10], r15d
cmove esi, ecx
cmp esi, r15d
jl 0x140021d5d
lea rcx, [r13 + 0x20]
call fcn.140022cd4
xor eax, eax
lea r14, [0x140002e9c]
lea ebp, [rax + 1]
mov rdi, r14
mov rcx, r12
repne scasw ax, word [rdi]
mov rdx, r14
not rcx
sub rcx, rbp
mov r8d, ecx
lea rcx, [r13 + 0x50]
call fcn.14000cd0c
mov rbx, qword [rsp + 0x38]
lea r8, [r13 + 0x50]
lea rdx, [r13 + 0x20]
mov rcx, rbx
call fcn.140021ef0
cmp eax, r15d
mov esi, eax
jl 0x140021d56
lea rcx, [r13 + 0x18]
lea rdx, [rsp + 0x38]
call fcn.14000c5e0
xor eax, eax
mov rcx, r12
mov rdi, r14
mov rdx, r14
repne scasw ax, word [rdi]
not rcx
sub rcx, rbp
mov r8d, ecx
lea rcx, [r13 + 8]
call fcn.14000cd0c
xor eax, eax
mov rcx, r12
mov rdi, r14
mov rdx, r14
repne scasw ax, word [rdi]
not rcx
sub rcx, rbp
mov r8d, ecx
lea rcx, [r13 + 0x10]
call fcn.14000cd0c
mov r14, qword [r13]
cmp dword [r14 - 0x10], r15d
je 0x140021cbd
mov eax, 0x4e4
lea r8d, [rbp + 0x33]
lea rcx, [rsp + 0x7c]
xor edx, edx
xor edi, edi
mov word [rsp + 0x7a], ax
call sub.msvcrt.dll_memset
lea rdx, [rsp + 0x68]
mov rcx, r14
call sub.VERSION.dll_GetFileVersionInfoSizeW
mov r12d, eax
test eax, eax
jne 0x140021b3f
call qword [sym.imp.KERNEL32.dll_GetLastError]
test eax, eax
je 0x140021cbd
movzx edi, ax
or edi, 0x80070000
test eax, eax
cmovle edi, eax
test edi, edi
js 0x140021cbd
mov rcx, r12
test r12d, r12d
jne 0x140021b4b
xor ecx, ecx
jmp 0x140021b59
xor edx, edx
or rax, 0xffffffffffffffff
div rcx
cmp rax, rbp
jb 0x140021b6e
call qword [sym.imp.msvcrt.dll_malloc]
mov rbp, rax
mov qword [rsp + 0x70], rax
test rax, rax
jne 0x140021b7e
jmp 0x140021b73
mov rbp, qword [rsp + 0x70]
test rbp, rbp
mov eax, 0x8007000e
cmove edi, eax
test edi, edi
js 0x140021cc2
mov edx, dword [rsp + 0x68]
mov r9, rbp
mov r8d, r12d
mov rcx, r14
call sub.VERSION.dll_GetFileVersionInfoW
test eax, eax
jne 0x140021bb8
call qword [sym.imp.KERNEL32.dll_GetLastError]
test eax, eax
je 0x140021cc2
movzx edi, ax
or edi, 0x80070000
test eax, eax
cmovle edi, eax
test edi, edi
js 0x140021cc2
lea r9, [rsp + 0x44]
lea r8, [rsp + 0x60]
lea rdx, [0x140006198]
mov rcx, rbp
call sub.VERSION.dll_VerQueryValueW
test eax, eax
jne 0x140021bf9
call qword [sym.imp.KERNEL32.dll_GetLastError]
test eax, eax
je 0x140021cc2
movzx edi, ax
or edi, 0x80070000
test eax, eax
cmovle edi, eax
test edi, edi
js 0x140021cc2
mov rdx, qword [rsp + 0x60]
lea rcx, [rsp + 0x7c]
mov r8d, 0x34
call sub.msvcrt.dll_memcpy
mov rbp, qword [rsp + 0x70]
lea r9, [rsp + 0x44]
lea r8, [rsp + 0x60]
lea rdx, [0x1400061a0]
mov rcx, rbp
call sub.VERSION.dll_VerQueryValueW
test eax, eax
je 0x140021c4a
cmp dword [rsp + 0x44], 4
jb 0x140021c4a
mov rax, qword [rsp + 0x60]
mov ecx, dword [rax]
mov dword [rsp + 0x78], ecx
cmp dword [rsp + 0x7c], 0xfeef04bd
mov eax, 0x8000ffff
cmovne edi, eax
test edi, edi
js 0x140021cc2
lea rcx, [r13 + 8]
call fcn.14000cb24
movzx edx, word [rsp + 0x88]
mov eax, dword [rsp + 0x88]
mov r8d, dword [rsp + 0x84]
movzx r9d, word [rsp + 0x84]
mov dword [rsp + 0x28], edx
shr eax, 0x10
lea rdx, [0x140006210]
lea rcx, [r13 + 8]
shr r8d, 0x10
mov dword [rsp + 0x20], eax
call fcn.1400181c8
lea r8, [r13 + 0x10]
lea rdx, [0x140006268]
lea rcx, [rsp + 0x70]
call fcn.1400214a0
jmp 0x140021cc2
mov rbp, qword [rsp + 0x70]
mov rcx, qword [r13 + 0x60]
mov rdi, qword [rsp + 0x30]
mov qword [rsp + 0x30], r15
cmp rcx, r15
je 0x140021cdb
mov rax, qword [rcx]
call qword [rax + 0x10]
mov qword [r13 + 0x60], rdi
or r12, 0xffffffffffffffff
mov rcx, qword [rsp + 0x30]
cmp rcx, r15
je 0x140021cf3
mov rax, qword [rcx]
call qword [rax + 0x10]
mov rcx, qword [rsp + 0x48]
cmp rcx, r15
je 0x140021d03
mov rax, qword [rcx]
call qword [rax + 0x10]
mov rcx, rbp
call qword [sym.imp.msvcrt.dll_free]
lea rdx, [rbx - 0x18]
mov eax, r12d
lock xadd dword [rdx + 0x10], eax
add eax, r12d
cmp eax, r15d
jg 0x140021d29
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + 8]
mov eax, esi
mov rcx, qword [rsp + 0xd8]
xor rcx, rsp
call fcn.140029f80
mov rbx, qword [rsp + 0x130]
add rsp, 0xe0
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
mov rbp, qword [rsp + 0x70]
jmp 0x140021ce3
mov rbx, qword [rsp + 0x38]
jmp 0x140021d56