Function at 0x631c21f0
Capabilities:
Check if file exists
Get common file path
Get file attributes

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
push dword [ecx - 4]
push ebp
mov ebp, esp
push edi
push esi
push ebx
push ecx
sub esp, 0x278
mov eax, dword [ecx]
mov esi, dword [ecx + 4]
mov dword [ebp - 0x23c], 0
mov dword [ebp - 0x238], 0
mov ebx, dword [ecx + 8]
mov dword [ebp - 0x24c], eax
mov edi, dword [ecx + 0xc]
mov dword [ebp - 0x234], 0
mov dword [ebp - 0x230], 0
mov dword [ebp - 0x22c], 0
mov dword [ebp - 0x224], 0
test byte [0x631c9018], 8
jne 0x631c2780
test ebx, ebx
je 0x631c27f7
cmp word [ebx], 0
je 0x631c27f7
mov eax, dword [sym.imp.ucrtbase.dll_wcsrchr]
mov dword [esp + 4], 0x2e
mov dword [esp], ebx
mov dword [ebp - 0x250], eax
call eax
mov esi, eax
test eax, eax
je 0x631c2760
mov dword [esp + 4], str..exe
mov edi, dword [sym.imp.kernel32.dll_lstrcmpiW]
mov dword [esp], eax
call edi
sub esp, 8
test eax, eax
jne 0x631c2748
mov dword [esp], ebx
call dword [sym.imp.kernel32.dll_GetFileAttributesW]
sub esp, 4
cmp eax, 0xffffffff
je 0x631c2869
lea eax, [ebp - 0x240]
mov dword [esp + 4], ebx
mov dword [esp], eax
call sym._assembly_create
test eax, eax
js 0x631c2770
lea eax, [ebp - 0x23c]
xor ebx, ebx
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_name
mov esi, eax
test eax, eax
js 0x631c26a8
lea eax, [ebp - 0x238]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_pubkey_token
mov esi, eax
test eax, eax
js 0x631c26a8
lea eax, [ebp - 0x234]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_version
mov esi, eax
test eax, eax
js 0x631c26a8
lea eax, [ebp - 0x228]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_runtime_version
mov esi, eax
test eax, eax
js 0x631c26a8
lea eax, [ebp - 0x224]
mov dword [esp + 8], eax
lea eax, [ebp - 0x22c]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_external_files
mov esi, eax
test eax, eax
js 0x631c26a8
mov eax, dword [ebp - 0x24c]
mov dword [esp + 4], 0xffffffff
mov edi, str.v4.0.30319
mov eax, dword [eax + 8]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_WaitForSingleObject]
mov eax, dword [ebp - 0x240]
sub esp, 8
mov dword [esp], eax
call sym._assembly_get_architecture
mov esi, dword [ebp - 0x228]
mov dword [esp + 4], 0x104
mov ebx, eax
lea eax, [ebp - 0x220]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_GetWindowsDirectoryW]
mov ecx, 0xb
sub esp, 8
mov dword [ebp - 0x254], eax
mov edx, eax
repe cmpsb byte [esi], byte es:[edi]
seta al
sbb al, 0
test al, al
jne 0x631c282c
lea esi, [edx + edx]
lea eax, [ebp - 0x220]
mov edx, 0x5c
lea ecx, [eax + esi]
xor eax, eax
jmp 0x631c2427
movzx edx, word [eax + str.Microsoft.NET_]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c2420
lea ecx, [ebp + esi - 0x202]
xor eax, eax
mov edx, 0x61
jmp 0x631c244f
movzx edx, word [eax + 0x631cb442]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c2448
mov eax, dword [ebp - 0x254]
add eax, 0x1b
cmp ebx, 2
je 0x631c2873
ja 0x631c27c6
test ebx, ebx
je 0x631c249a
lea ecx, [ebp + eax*2 - 0x220]
mov edx, 0x5f
xor eax, eax
jmp 0x631c248e
movzx edx, word [eax + str._MSIL]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c2487
cmp word [ebp - 0x220], 0
je 0x631c28ea
lea eax, [ebp - 0x220]
nop
add eax, 2
cmp word [eax], 0
jne 0x631c24b0
lea edx, [ebp - 0x220]
sub eax, edx
sar eax, 1
mov edx, dword [ebp - 0x23c]
cmp word [edx], 0
mov dword [ebp - 0x254], edx
je 0x631c24eb
lea esi, [esi]
add edx, 2
cmp word [edx], 0
jne 0x631c24d8
sub edx, dword [ebp - 0x254]
sar edx, 1
add eax, edx
mov edx, dword [ebp - 0x234]
cmp word [edx], 0
mov dword [ebp - 0x258], edx
je 0x631c2513
lea esi, [esi]
add edx, 2
cmp word [edx], 0
jne 0x631c2500
sub edx, dword [ebp - 0x258]
sar edx, 1
add eax, edx
mov edx, dword [ebp - 0x238]
cmp word [edx], 0
je 0x631c2537
mov ecx, edx
lea esi, [esi]
add ecx, 2
cmp word [ecx], 0
jne 0x631c2528
sub ecx, edx
sar ecx, 1
add eax, ecx
add eax, 0x13
mov dword [ebp - 0x260], edx
mov dword [ebp - 0x25c], eax
add eax, eax
mov dword [esp], eax
call dword [sym.imp.ucrtbase.dll_malloc]
mov ebx, eax
test eax, eax
je 0x631c28f1
mov esi, dword [ebp - 0x228]
mov ecx, 0xb
mov edi, str.v4.0.30319
mov edx, dword [ebp - 0x260]
repe cmpsb byte [esi], byte es:[edi]
mov dword [esp + 0x18], edx
seta al
sbb al, 0
test al, al
jne 0x631c2801
mov edx, dword [ebp - 0x258]
mov dword [esp + 8], str._s_s_v4.0__s___s_
mov dword [esp + 0x14], edx
mov edx, dword [ebp - 0x254]
mov dword [esp + 0x10], edx
lea edx, [ebp - 0x220]
mov dword [esp + 0xc], edx
mov eax, dword [ebp - 0x25c]
mov dword [esp], ebx
mov dword [esp + 4], eax
call sym._swprintf
mov dword [ebp - 0x254], eax
mov eax, ebx
call sym._create_full_path
lea eax, [ebp - 0x230]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_get_path
mov esi, eax
test eax, eax
js 0x631c26a8
mov eax, dword [ebp - 0x230]
mov dword [esp + 4], 0x5c
mov dword [esp], eax
mov eax, dword [ebp - 0x250]
call eax
mov dword [ebp - 0x250], eax
test eax, eax
je 0x631c28d5
mov edx, dword [ebp - 0x230]
add eax, 2
mov ecx, eax
sub ecx, edx
mov dword [ebp - 0x250], edx
mov edx, ecx
sar edx, 1
mov dword [ebp - 0x258], edx
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x254]
mov ecx, ebx
mov edx, dword [ebp - 0x258]
mov dword [esp], eax
mov eax, dword [ebp - 0x250]
call sym._copy_file
mov esi, eax
test eax, eax
js 0x631c26a8
mov edx, dword [ebp - 0x224]
test edx, edx
je 0x631c26a8
mov esi, dword [ebp - 0x258]
xor edi, edi
jmp 0x631c2679
inc edi
cmp dword [ebp - 0x224], edi
jbe 0x631c26a2
mov eax, dword [ebp - 0x22c]
mov ecx, ebx
mov edx, esi
mov eax, dword [eax + edi*4]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x254]
mov dword [esp], eax
mov eax, dword [ebp - 0x250]
call sym._copy_file
test eax, eax
jns 0x631c2670
mov esi, eax
lea esi, [esi]
mov eax, dword [ebp - 0x23c]
mov edi, dword [sym.imp.ucrtbase.dll_free]
mov dword [esp], eax
call edi
mov eax, dword [ebp - 0x238]
mov dword [esp], eax
call edi
mov eax, dword [ebp - 0x234]
mov dword [esp], eax
call edi
mov eax, dword [ebp - 0x230]
mov dword [esp], eax
call edi
mov dword [esp], ebx
xor ebx, ebx
call edi
mov eax, dword [ebp - 0x224]
test eax, eax
je 0x631c2707
lea esi, [esi]
nop
mov eax, dword [ebp - 0x22c]
mov eax, dword [eax + ebx*4]
inc ebx
mov dword [esp], eax
call edi
cmp dword [ebp - 0x224], ebx
ja 0x631c26f0
mov eax, dword [ebp - 0x22c]
mov dword [esp], eax
call edi
mov eax, dword [ebp - 0x240]
mov dword [esp], eax
call sym._assembly_release
mov eax, dword [ebp - 0x24c]
mov eax, dword [eax + 8]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_ReleaseMutex]
sub esp, 4
lea esp, [ebp - 0x10]
mov eax, esi
pop ecx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x10
mov dword [esp + 4], str..dll
mov dword [esp], esi
call edi
sub esp, 8
test eax, eax
je 0x631c22b3
mov esi, 0x8007007b
jmp 0x631c2735
mov esi, 0x80131018
xor ebx, ebx
jmp 0x631c26a8
mov eax, ebx
call sym._wine_dbgstr_wn.constprop.0
mov dword [esp + 0x1c], edi
mov dword [esp + 0x18], eax
mov eax, dword [ebp - 0x24c]
mov dword [esp + 0x14], esi
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.__p___ld___s___p__n
mov dword [esp + 8], str.IAssemblyCacheImpl_InstallAssembly
mov dword [esp + 4], 0x631c9018
mov dword [esp], 3
call sym._wine_dbg_log.constprop.0
jmp 0x631c2261
cmp ebx, 4
jne 0x631c289b
lea ecx, [ebp + eax*2 - 0x220]
mov edx, 0x5f
xor eax, eax
jmp 0x631c27e6
movzx edx, word [eax + 0x631cb424]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c27df
jmp 0x631c249a
mov esi, 0x80070057
jmp 0x631c2735
mov eax, dword [ebp - 0x258]
mov dword [esp + 8], 0x631cb490
mov dword [esp + 0x14], eax
mov eax, dword [ebp - 0x254]
mov dword [esp + 0x10], eax
lea eax, [ebp - 0x220]
mov dword [esp + 0xc], eax
jmp 0x631c25aa
mov eax, dword [ebp - 0x254]
mov edx, 0x5c
lea ecx, [ebp + eax*2 - 0x220]
xor eax, eax
jmp 0x631c284f
movzx edx, word [eax + str._assemblyGAC]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c2848
mov eax, dword [ebp - 0x254]
add eax, 0xd
jmp 0x631c2464
mov esi, 0x80070002
jmp 0x631c2735
lea ecx, [ebp + eax*2 - 0x220]
mov edx, 0x5f
xor eax, eax
jmp 0x631c288a
movzx edx, word [eax + 0x631cb42c]
mov word [ecx + eax], dx
add eax, 2
test dx, dx
jne 0x631c2883
jmp 0x631c249a
test byte [0x631c9018], 4
je 0x631c249a
mov dword [esp + 0x10], ebx
mov dword [esp + 0xc], str.unhandled_architecture__u_n
mov dword [esp + 8], str.get_assembly_directory
mov dword [esp + 4], 0x631c9018
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0
jmp 0x631c249a
mov dword [ebp - 0x258], 0
mov eax, dword [ebp - 0x230]
jmp 0x631c262f
xor eax, eax
jmp 0x631c24c3
mov esi, 0x8007000e
jmp 0x631c26a8