Function at 0x416370
Capabilities:
Get file size
Read file on windows

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x54bb1d
mov eax, dword fs:[0]
push eax
sub esp, 0x30
mov eax, dword [0x599680]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ebx, ecx
mov eax, dword [ebx]
mov esi, dword [ebp + 8]
test eax, eax
je 0x4163af
push eax
call fcn.0051c95e
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x4163bf
push eax
call fcn.0051c95e
add esp, 4
push 0x59ae64
lea ecx, [ebp - 0x28]
mov dword [ebx], 0
mov dword [ebx + 4], 0
call fcn.004028b0
push esi
mov dword [ebp - 4], 0
call dword [sym.imp.SHLWAPI.dll_PathIsRelativeW]
mov edx, esi
lea edi, [edx + 2]
nop dword [eax]
mov cx, word [edx]
add edx, 2
test cx, cx
jne 0x4163f0
sub edx, edi
lea ecx, [ebp - 0x28]
sar edx, 1
push edx
push esi
test eax, eax
je 0x41640f
call fcn.00402730
jmp 0x416414
call fcn.004020a0
cmp dword [ebp - 0x14], 8
lea eax, [ebp - 0x28]
push 0
cmovae eax, dword [ebp - 0x28]
push 0x80
push 3
push 0
push 1
push bind
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 0x30], eax
cmp eax, 0xffffffff
jne 0x416447
mov eax, str.Error_opening_file
jmp 0x41645e
push 0
push eax
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov esi, eax
mov dword [ebp - 0x38], esi
test esi, esi
jne 0x416474
mov eax, str.File_is_empty
mov ecx, ebx
mov edx, 0xd8
mov edi, 0x10
add ebx, edi
lea esi, [ecx + edx]
jmp 0x4164fa
cmp esi, 0x400000
jbe 0x416483
mov eax, str.File_too_large
jmp 0x4164f1
push esi
mov dword [ebp - 0x34], 0
call fcn.00509fac
add esp, 4
mov edi, eax
lea eax, [ebp - 0x34]
mov dword [ebp - 0x3c], edi
push 0
push eax
push esi
push edi
push dword [ebp - 0x30]
call dword [sym.imp.KERNEL32.dll_ReadFile]
push dword [ebp - 0x30]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
cmp dword [ebp - 0x34], esi
je 0x41651a
push edi
call fcn.00509fb5
mov eax, dword [ebx]
add esp, 4
test eax, eax
je 0x4164cf
push eax
call fcn.0051c95e
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x4164df
push eax
call fcn.0051c95e
add esp, 4
mov dword [ebx], 0
mov eax, str.Could_not_read_file
mov dword [ebx + 4], 0
lea esi, [ebx + 0xd8]
add ebx, 0x10
push 0x63
push eax
push ebx
call fcn.0052536d
push 0x31
push 0x57e7b0
push esi
call fcn.0052536d
add esp, 0x18
xor bl, bl
jmp 0x4165cb
mov eax, edi
mov dword [ebp - 0x30], eax
cmp esi, 3
jb 0x416541
cmp byte [edi], 0xef
jne 0x416541
cmp byte [edi + 1], 0xbb
jne 0x416541
cmp byte [edi + 2], 0xbf
jne 0x416541
lea eax, [edi + 3]
add esi, 0xfffffffd
mov dword [ebp - 0x30], eax
mov dword [ebp - 0x38], esi
mov edi, dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
push 0
push 0
push esi
push eax
push 0
push 0xfde9
call edi
mov esi, eax
lea ecx, [esi*2 + 2]
push ecx
call fcn.0051d1db
add esp, 4
mov dword [ebx], eax
push esi
push eax
push dword [ebp - 0x38]
push dword [ebp - 0x30]
push 0
push 0xfde9
call edi
mov eax, dword [ebx]
xor ecx, ecx
mov word [eax + esi*2], cx
mov ecx, ebx
call fcn.00416630
mov byte [ebp - 0x29], al
test al, al
jne 0x4165bd
mov eax, dword [ebx]
test eax, eax
je 0x4165a0
push eax
call fcn.0051c95e
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x4165b0
push eax
call fcn.0051c95e
add esp, 4
mov dword [ebx], 0
mov dword [ebx + 4], 0
push dword [ebp - 0x3c]
call fcn.00509fb5
mov bl, byte [ebp - 0x29]
add esp, 4
mov ecx, dword [ebp - 0x14]
cmp ecx, 8
jb 0x416601
mov edx, dword [ebp - 0x28]
lea ecx, [ecx*2 + 2]
mov eax, edx
cmp ecx, 0x1000
jb 0x4165f7
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x416621
push ecx
push edx
call fcn.00509f9e
add esp, 8
mov al, bl
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00509f60
mov esp, ebp
pop ebp
ret 8
call fcn.0051c85d
int3