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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4db5ed
mov eax, dword fs:[0]
push eax
sub esp, 0x30
mov eax, dword [0x51a500]
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 0x41674f
push eax
call fcn.004b87d6
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x41675f
push eax
call fcn.004b87d6
add esp, 4
push 0x51b004
lea ecx, [ebp - 0x28]
mov dword [ebx], 0
mov dword [ebx + 4], 0
call fcn.00402f80
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 0x416790
sub edx, edi
lea ecx, [ebp - 0x28]
sar edx, 1
push edx
push esi
test eax, eax
je 0x4167af
call fcn.00402e00
jmp 0x4167b4
call fcn.00402790
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 SysReAllocString
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 0x30], eax
cmp eax, 0xffffffff
jne 0x4167e7
mov eax, str.Error_opening_file
jmp 0x4167fe
push 0
push eax
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov esi, eax
mov dword [ebp - 0x38], esi
test esi, esi
jne 0x416814
mov eax, str.File_is_empty
mov ecx, ebx
mov edx, 0xd8
mov edi, 0x10
add ebx, edi
lea esi, [ecx + edx]
jmp 0x41689a
cmp esi, 0x400000
jbe 0x416823
mov eax, str.File_too_large
jmp 0x416891
push esi
mov dword [ebp - 0x34], 0
call fcn.004a66c1
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 0x4168ba
push edi
call fcn.004a66ca
mov eax, dword [ebx]
add esp, 4
test eax, eax
je 0x41686f
push eax
call fcn.004b87d6
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x41687f
push eax
call fcn.004b87d6
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.004c136c
push 0x31
push 0x4fdac0
push esi
call fcn.004c136c
add esp, 0x18
xor bl, bl
jmp 0x41696b
mov eax, edi
mov dword [ebp - 0x30], eax
cmp esi, 3
jb 0x4168e1
cmp byte [edi], 0xef
jne 0x4168e1
cmp byte [edi + 1], 0xbb
jne 0x4168e1
cmp byte [edi + 2], 0xbf
jne 0x4168e1
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.004ba86b
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.004169d0
mov byte [ebp - 0x29], al
test al, al
jne 0x41695d
mov eax, dword [ebx]
test eax, eax
je 0x416940
push eax
call fcn.004b87d6
add esp, 4
mov eax, dword [ebx + 4]
test eax, eax
je 0x416950
push eax
call fcn.004b87d6
add esp, 4
mov dword [ebx], 0
mov dword [ebx + 4], 0
push dword [ebp - 0x3c]
call fcn.004a66ca
mov bl, byte [ebp - 0x29]
add esp, 4
mov ecx, dword [ebp - 0x14]
cmp ecx, 8
jb 0x4169a1
mov edx, dword [ebp - 0x28]
lea ecx, [ecx*2 + 2]
mov eax, edx
cmp ecx, 0x1000
jb 0x416997
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x4169c1
push ecx
push edx
call fcn.004a66b3
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.004a6675
mov esp, ebp
pop ebp
ret 8
call fcn.004b86d5
int3