Function at 0x558340
Capabilities:
Read file on windows

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xc0
mov esi, ecx
mov ebx, dword [ebp + 0xc]
mov eax, dword [0x646040]
xor eax, ebp
mov dword [esp + 0xb8], eax
pcmpeqd xmm0, xmm0
lea edi, [esp + 0x70]
movdqa xmmword [edi + 0x20], xmm0
movdqa xmmword [edi + 0x10], xmm0
movdqa xmmword [edi], xmm0
lea eax, [esp + 0x50]
push 0x42
push str.file_win.cc
push str.Read
push eax
call fcn.00509c60
add esp, 0x10
xor eax, eax
mov ecx, edi
push eax
push eax
call fcn.00520c00
mov dword [esp + 0xa4], 0xa
mov al, byte [0x64b456]
test al, al
jne 0x55892a
xor ecx, ecx
dec ecx
test ebx, ebx
js 0x558416
mov eax, dword [ebp + 0x14]
test eax, eax
js 0x558416
mov ecx, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
pxor xmm0, xmm0
movdqa xmmword [esp + 0x50], xmm0
mov dword [esp + 0x60], 0
mov dword [esp + 0x5c], ebx
mov dword [esp + 0x58], ecx
lea ecx, [esp + 0xa8]
mov dword [ecx], 0xffffffff
lea edi, [esp + 0x50]
push edi
push ecx
push eax
push edx
push dword [esi]
call dword [sym.imp.KERNEL32.dll_ReadFile]
test eax, eax
je 0x5586b0
mov ecx, dword [esp + 0xa8]
test ecx, ecx
js 0x5588fa
mov dword [esp + 0x1c], ecx
mov dword [esp + 0xa8], 0xa
mov al, byte [0x64b456]
test al, al
jne 0x558902
call fcn.00564085
mov edi, dword [eax]
call fcn.00564085
xor ebx, ebx
mov dword [eax], ebx
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov esi, eax
push ebx
call dword [sym.imp.KERNEL32.dll_SetLastError]
mov ebx, dword [esp + 0x70]
test ebx, ebx
je 0x5584c4
cmp dword [esp + 0x74], 0
jne 0x5584c4
cmp byte [ebx + 0x11], 1
jne 0x5584c4
mov eax, dword [ebx + 0x20]
add eax, 0x50
mov dword [esp + 0xc], eax
push eax
call dword [sym.imp.KERNEL32.dll_TryAcquireSRWLockExclusive]
test al, al
je 0x5586a1
xor eax, eax
mov dword [ebx + 0x1c], eax
mov dword [ebx + 0x18], eax
cmp byte [ebx + 0x2b], 0
jne 0x5584b4
mov eax, dword [ebx + 0x20]
cmp byte [ebx + 0x29], 1
je 0x55866c
dec dword [eax + 0xb0]
cmp byte [ebx + 0x11], 0
je 0x55895d
cmp byte [ebx + 0x10], 0
je 0x558560
mov word [ebx + 0x29], 0
push dword [esp + 0xc]
call dword [sym.imp.KERNEL32.dll_ReleaseSRWLockExclusive]
push esi
call dword [sym.imp.KERNEL32.dll_SetLastError]
call fcn.00564085
mov dword [eax], edi
cmp byte [esp + 0x98], 1
jne 0x5584eb
mov eax, dword [esp + 0x90]
test eax, eax
jne 0x558578
mov eax, dword [esp + 0x78]
test eax, eax
je 0x5584f9
mov ecx, dword [esp + 0x7c]
mov dword [eax], ecx
mov eax, dword [esp + 0x74]
mov ecx, eax
shr ecx, 0xe
mov edx, eax
shr edx, 0x13
mov edx, dword [edx*4 + 0x64e810]
bt edx, ecx
jb 0x5588b8
mov dword [esp + 0x74], 0
mov eax, dword [esp + 0x70]
mov ecx, eax
shr ecx, 0xe
mov edx, eax
shr edx, 0x13
mov edx, dword [edx*4 + 0x64e810]
bt edx, ecx
jb 0x558555
mov ecx, dword [esp + 0xb8]
xor ecx, ebp
call fcn.00567335
mov eax, dword [esp + 0x1c]
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret 0x10
push eax
call fcn.004f4f20
add esp, 4
jmp 0x558539
mov eax, dword [ebx + 0x20]
cmp byte [ebx + 0x2a], 1
je 0x5588c6
dec dword [eax + 0xb4]
jmp 0x5584b4
mov dword [esp + 0xc], eax
mov ecx, dword [fcn.005608f0]
cmp ecx, 0x5531a0
jne 0x558652
xor eax, eax
mov dword [esp + 0x54], eax
mov dword [esp + 0x50], eax
lea eax, [esp + 0x50]
push eax
call dword [sym.imp.KERNEL32.dll_QueryPerformanceCounter]
mov esi, dword [esp + 0x50]
mov edi, dword [esp + 0x54]
mov eax, 0x7bd05af6
cmp eax, esi
mov eax, 0x863
sbb eax, edi
jl 0x558981
mov ecx, 0xf4240
mov eax, esi
mul ecx
imul ecx, edi, 0xf4240
add ecx, edx
push dword [0x64b6cc]
push dword [0x64b6c8]
push ecx
push eax
call fcn.005877d0
mov ecx, edx
mov dword [esp + 0xa8], eax
mov dword [esp + 0xac], ecx
mov edx, dword [esp + 0x88]
mov esi, dword [esp + 0x8c]
mov dword [esp + 4], eax
sub eax, edx
mov dword [esp + 8], ecx
sbb ecx, esi
seto bl
mov edi, ecx
sar edi, 0x1f
test bl, bl
cmovne eax, edi
add edi, 0x80000000
test bl, bl
cmove edi, ecx
cmp eax, 0xf4240
mov ecx, edi
sbb ecx, 0
jge 0x5586c5
mov esi, dword [esp + 0x90]
test esi, esi
je 0x5584eb
lock dec dword [esi]
jne 0x5584eb
jmp 0x55896c
call dword [0x6401dc]
lea esi, [esp + 0xa8]
push esi
call ecx
add esp, 4
mov eax, dword [esi]
mov ecx, dword [esi + 4]
jmp 0x5585f3
mov ecx, dword [eax + 0x5c]
mov edx, dword [eax + 0xa0]
dec edx
mov dword [eax + 0xa0], edx
cmp ecx, dword [eax + 0x60]
je 0x558689
cmp dword [eax + 0xa8], edx
jae 0x558694
mov word [eax + 0x78], 0
jmp 0x5584a0
movzx ecx, word [ecx + 8]
mov word [eax + 0x78], cx
jmp 0x5584a0
push dword [esp + 0xc]
call dword [sym.imp.KERNEL32.dll_AcquireSRWLockExclusive]
jmp 0x55847f
call dword [sym.imp.KERNEL32.dll_GetLastError]
xor ecx, ecx
cmp eax, 0x26
setne cl
neg ecx
jmp 0x558416
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], eax
mov dword [esp + 0x10], esi
xor eax, eax
dec eax
mov ebx, 0x3938700
mov esi, dword [esp + 0xc]
add ebx, dword [esi + 0xf8]
mov ecx, dword [esi + 0xfc]
adc ecx, 0
mov edx, 0x7fffffff
cmovno edx, ecx
cmovo ebx, eax
mov eax, dword [esp + 4]
cmp eax, ebx
mov ebx, dword [esp + 8]
mov ecx, ebx
sbb ecx, edx
jge 0x558a50
mov ecx, dword [esi + 0xf8]
mov eax, dword [esi + 0xfc]
mov edx, dword [esp + 0x14]
mov dword [esp + 8], ecx
sub edx, ecx
mov ebx, dword [esp + 0x10]
mov dword [esp + 4], eax
sbb ebx, eax
seto cl
mov eax, ebx
sar eax, 0x1f
test cl, cl
cmovne edx, eax
add eax, 0x80000000
test cl, cl
cmove eax, ebx
mov ecx, edx
add ecx, 1
mov ebx, eax
adc ebx, 0x80000000
cmp ecx, 2
sbb ebx, 0
mov ebx, 0x80000000
mov esi, dword [esp + 0x18]
jb 0x558a2c
movd xmm0, edx
movd xmm1, eax
punpckldq xmm0, xmm1
movq qword [esp + 0x48], xmm0
fild qword [esp + 0x48]
fstp qword [esp + 0x40]
movsd xmm0, qword [esp + 0x40]
divsd xmm0, qword [0x62fcc0]
sub esp, 8
movsd qword [esp], xmm0
call fcn.00590cb0
add esp, 8
fstp qword [esp + 0x20]
movsd xmm0, qword [esp + 0x20]
xor ecx, ecx
movsd xmm1, qword [0x6302f0]
ucomisd xmm0, xmm1
mov eax, 0x7fffffff
cmovb eax, ecx
movsd xmm2, qword [0x6302f8]
ucomisd xmm2, xmm0
maxsd xmm0, xmm1
cvttsd2si ecx, xmm0
cmovb ecx, eax
movd xmm0, esi
xor eax, eax
inc eax
add eax, esi
movd xmm1, edi
adc ebx, edi
cmp eax, 2
sbb ebx, 0
mov edi, 0x7fffffff
punpckldq xmm0, xmm1
movq qword [esp + 0x38], xmm0
fild qword [esp + 0x38]
fstp qword [esp + 0x30]
mov ebx, ecx
jae 0x55880d
movsd xmm0, qword [0x630300]
jmp 0x55881b
movsd xmm0, qword [esp + 0x30]
divsd xmm0, qword [0x62fcc0]
sub esp, 8
movsd qword [esp], xmm0
call fcn.00590dad
add esp, 8
fstp qword [esp + 0x28]
movsd xmm0, qword [esp + 0x28]
movsd xmm1, qword [0x6302f0]
ucomisd xmm0, xmm1
mov eax, 0
cmovb edi, eax
movsd xmm2, qword [0x6302f8]
ucomisd xmm2, xmm0
maxsd xmm0, xmm1
cvttsd2si esi, xmm0
cmovb esi, edi
add esi, ebx
cmp esi, 0x3c
mov edi, 0x3c
cmovl edi, esi
mov eax, dword [esp + 0xc]
add eax, 4
mov dword [esp + 4], eax
push eax
call dword [sym.imp.KERNEL32.dll_TryAcquireSRWLockExclusive]
test al, al
je 0x5588ac
cmp ebx, edi
mov eax, dword [esp + 0xc]
jge 0x558894
inc dword [eax + ebx*4 + 8]
inc ebx
cmp edi, ebx
jne 0x55888b
push dword [esp + 4]
call dword [sym.imp.KERNEL32.dll_ReleaseSRWLockExclusive]
cmp esi, 0x3d
jl 0x558635
jmp 0x558a0d
push dword [esp + 4]
call dword [sym.imp.KERNEL32.dll_AcquireSRWLockExclusive]
jmp 0x558883
push eax
call fcn.004f4f20
add esp, 4
jmp 0x558517
dec dword [eax + 0xa4]
mov ecx, dword [eax + 0x5c]
cmp ecx, dword [eax + 0x60]
je 0x5588e2
mov edx, dword [eax + 0xa8]
cmp edx, dword [eax + 0xa0]
jae 0x5588ed
mov word [eax + 0x78], 0
jmp 0x5584b4
movzx ecx, word [ecx + 8]
mov word [eax + 0x78], cx
jmp 0x5584b4
int3
movzx eax, al
mov dword [esp + 0x50], 0
lea ecx, [esp + 0xa8]
push 2
lea edx, [esp + 0x54]
push edx
push ecx
push eax
call fcn.00591070
add esp, 0x10
jmp 0x558432
movzx ecx, al
lea eax, [esp + 0xa8]
lea edx, [esp + 0x50]
mov dword [eax], edx
lea edi, [esp + 0xb4]
mov dword [edi], str.ScopedBlockingCall
lea edx, [esp + 0xa4]
push eax
push edi
call fcn.005b7340
add esp, 8
jmp 0x5583b4
push str....._third_partylibc_srcincludeoptional:795:_assertion_this__has_value___failed:_optional_operator_called_on_a_disengaged_value_n
push 0x624e92
call fcn.005912b0
mov ecx, esi
call fcn.004f2270
push esi
call fcn.00564050
add esp, 4
jmp 0x5584eb
mov ebx, dword [0x64b6c8]
mov dword [esp + 0x14], ebx
mov eax, dword [0x64b6cc]
mov dword [esp + 4], eax
push eax
push ebx
push edi
push esi
call fcn.005877d0
mov dword [esp + 8], eax
mov ecx, edx
mov eax, dword [esp + 8]
mul ebx
mov dword [esp + 0x18], eax
mov eax, dword [esp + 8]
mov ebx, eax
imul ebx, dword [esp + 4]
add edx, ebx
imul ebx, ecx, 0xf4240
mov dword [esp + 0x10], ebx
mov ebx, dword [esp + 0x14]
imul ecx, ebx
add ecx, edx
sub esi, dword [esp + 0x18]
sbb edi, ecx
mov ecx, 0xf4240
mul ecx
mov dword [esp + 8], eax
add edx, dword [esp + 0x10]
mov dword [esp + 0x10], edx
mov eax, esi
mul ecx
imul ecx, edi, 0xf4240
add edx, ecx
push dword [esp + 4]
push ebx
push edx
push eax
call fcn.005877d0
mov ecx, edx
add eax, dword [esp + 8]
adc ecx, dword [esp + 0x10]
jmp 0x5585e5
mov eax, dword [esp + 0xc]
mov eax, dword [eax + 0x100]
sub esi, edi
xor ebx, ebx
mov dword [esp + 0xc], eax
test eax, eax
jne 0x558860
jmp 0x558635
mov eax, dword [esp + 0x14]
cmp eax, dword [esp + 8]
mov eax, dword [esp + 0x10]
sbb eax, dword [esp + 4]
setl al
movzx eax, al
movsd xmm0, qword [eax*8 + 0x6302e0]
jmp 0x558784
mov dword [esp + 0x50], eax
mov dword [esp + 0x54], ebx
sub esp, 0xc
movq xmm0, qword [esp + 0x5c]
movq qword [esp + 4], xmm0
lea ebx, [esp + 0xc0]
mov dword [esp], ebx
call fcn.004f2190
add esp, 0xc
mov ebx, dword [ebx]
test ebx, ebx
je 0x55870b
lock dec dword [ebx]
jne 0x55870b
mov ecx, ebx
call fcn.004f2270
push ebx
call fcn.00564050
add esp, 4
jmp 0x55870b