Function at 0x68f0f88c
Capabilities:
Read file on windows
Write file on windows

Disassembly:
push 0x78
mov eax, 0x68f64715
call fcn.68f54c62
push dword [ebp + 8]
and dword [ebp - 0x18], 0
call sym.GrooveUtil.DLL_public:_static_unsigned_long_long_unsigned___int64____stdcall_GCFileInterface::GetLength_void__
mov edi, dword [ebp + 0x18]
mov ebx, dword [ebp + 0x1c]
mov ecx, edi
and ecx, ebx
cmp ecx, 0xffffffff
jne 0x68f0f8bd
mov edi, eax
sub edi, dword [ebp + 0x10]
mov ebx, edx
sbb ebx, dword [ebp + 0x14]
mov esi, edi
add esi, dword [ebp + 0x10]
mov ecx, ebx
adc ecx, dword [ebp + 0x14]
mov dword [ebp - 0x30], ebx
cmp ecx, edx
mov dword [ebp - 0x34], edi
jb 0x68f0f8e6
ja 0x68f0f8d7
cmp esi, eax
jbe 0x68f0f8e6
push 0x80070057
push 0x2e6e7432
call fcn.68ef1014
mov eax, edi
or eax, ebx
je 0x68f0fdda
xor esi, esi
cmp dword [ebp + 0xc], 1
jne 0x68f0f8fd
mov dword [ebp + 0x1c], edi
jmp 0x68f0f943
cmp ebx, esi
ja 0x68f0f909
cmp edi, 0xc0000
jbe 0x68f0f912
mov dword [ebp + 0x1c], 0x30000
jmp 0x68f0f943
cmp ebx, esi
ja 0x68f0f91e
cmp edi, 0x30000
jbe 0x68f0f927
mov dword [ebp + 0x1c], 0x6000
jmp 0x68f0f943
cmp ebx, esi
ja 0x68f0f933
cmp edi, 0x6000
jbe 0x68f0f93c
mov dword [ebp + 0x1c], 0xc00
jmp 0x68f0f943
mov dword [ebp + 0x1c], 0x180
push esi
push dword [ebp + 0x1c]
lea ecx, [ebp - 0x14]
push 0x11
call sym.GrooveUtil.DLL_public:_void___thiscall_GCSafeArray::constructor_unsigned_short_int__unsigned_long_int__long_int_
mov dword [ebp - 4], esi
mov eax, dword [ebp + 0xc]
sub eax, esi
je 0x68f0fdce
dec eax
je 0x68f0faa1
dec eax
je 0x68f0f984
dec eax
je 0x68f0fae3
push 0x80070057
push 0x2e6e7433
call fcn.68ef1014
jmp 0x68f0fae3
lea eax, [ebp - 0x3c]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 2
mov eax, dword [eax + 4]
mov cl, byte [ebp + 0x28]
mov byte [eax], cl
mov byte [ebp - 4], 0
cmp dword [ebp - 0x3c], esi
je 0x68f0f9b8
cmp dword [ebp - 0x38], esi
je 0x68f0f9b8
push dword [ebp - 0x3c]
mov ebx, dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
call ebx
jmp 0x68f0f9be
mov ebx, dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
lea eax, [ebp - 0x44]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 3
mov eax, dword [eax + 4]
mov cl, byte [ebp + 0x2c]
mov byte [eax + 1], cl
mov byte [ebp - 4], 0
cmp dword [ebp - 0x44], esi
je 0x68f0f9eb
cmp dword [ebp - 0x40], esi
je 0x68f0f9eb
push dword [ebp - 0x44]
call ebx
lea eax, [ebp - 0x4c]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 4
mov eax, dword [eax + 4]
mov cl, byte [ebp + 0x30]
mov byte [eax + 2], cl
mov byte [ebp - 4], 0
cmp dword [ebp - 0x4c], esi
je 0x68f0fa18
cmp dword [ebp - 0x48], esi
je 0x68f0fa18
push dword [ebp - 0x4c]
call ebx
push 3
pop esi
cmp dword [ebp + 0x1c], esi
jbe 0x68f0fa8f
lea eax, [ebp - 0x5c]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov edi, eax
mov byte [ebp - 4], 5
lea eax, [ebp - 0x54]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 6
mov edi, dword [edi + 4]
mov ecx, dword [ebp + 0x1c]
mov eax, dword [eax + 4]
push esi
push edi
sub ecx, esi
push ecx
add eax, esi
push eax
call dword [sym.imp.MSVCR80.dll_memcpy_s]
add esp, 0x10
mov byte [ebp - 4], 5
cmp dword [ebp - 0x54], 0
je 0x68f0fa73
cmp dword [ebp - 0x50], 0
je 0x68f0fa73
push dword [ebp - 0x54]
call ebx
mov byte [ebp - 4], 0
cmp dword [ebp - 0x5c], 0
je 0x68f0fa88
cmp dword [ebp - 0x58], 0
je 0x68f0fa88
push dword [ebp - 0x5c]
call ebx
add esi, esi
cmp esi, dword [ebp + 0x1c]
jb 0x68f0fa20
mov byte [ebp + 0x30], 0
mov al, byte [ebp + 0x30]
mov byte [ebp + 0x2c], al
mov al, byte [ebp + 0x2c]
mov byte [ebp + 0x28], al
jmp 0x68f0fae3
lea eax, [ebp - 0x64]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 1
mov cl, byte [ebp + 0x28]
push dword [ebp + 0x1c]
mov eax, dword [eax + 4]
movzx ecx, cl
push ecx
push eax
call sub.MSVCR80.dll_memset
add esp, 0xc
mov byte [ebp - 4], 0
cmp dword [ebp - 0x64], esi
je 0x68f0fadf
cmp dword [ebp - 0x60], esi
je 0x68f0fadf
push dword [ebp - 0x64]
call dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
mov byte [ebp + 0x28], 0
xor ebx, ebx
mov dword [ebp - 0x1c], ebx
mov byte [ebp - 4], 7
cmp byte [ebp + 0x20], bl
je 0x68f0faff
push ebx
push dword [ebp + 0x1c]
lea ecx, [ebp - 0x1c]
push 0x11
call sym.GrooveUtil.DLL_public:_void___thiscall_GCSafeArray::Set_unsigned_short_int__unsigned_long_int__long_int_
push ebx
push dword [ebp + 0x14]
push dword [ebp + 0x10]
push dword [ebp + 8]
call sym.GrooveUtil.DLL_public:_static_unsigned_long_long_unsigned___int64____stdcall_GCFileInterface::Seek_void___long_long___int64___unsigned_long_int_
mov ecx, dword [ebp - 0x34]
mov eax, dword [ebp - 0x30]
mov dword [ebp + 0x10], ecx
mov dword [ebp + 0x14], eax
mov edi, dword [ebp + 0x14]
xor eax, eax
cmp edi, eax
jb 0x68f0fb2f
ja 0x68f0fb2a
cmp ecx, dword [ebp + 0x1c]
jbe 0x68f0fb2f
mov ecx, dword [ebp + 0x1c]
mov edi, eax
cmp dword [ebp + 0xc], 3
mov dword [ebp - 0x34], ecx
jne 0x68f0fb75
lea eax, [ebp - 0x20]
push eax
mov word [ebp + 0x28], bx
call fcn.68f0dedf
mov byte [ebp - 4], 8
push dword [ebp + 0x28]
mov esi, dword [eax]
mov eax, dword [esi]
lea ecx, [ebp - 0x14]
push ecx
push esi
call dword [eax + 0x2c]
cmp eax, ebx
jge 0x68f0fb68
push 0x68f798f0
push esi
push eax
call fcn.68ef1079
mov byte [ebp - 4], 7
lea eax, [ebp - 0x20]
push eax
call fcn.68f42223
cmp byte [ebp + 0x20], 0
je 0x68f0fb8d
push 1
push ebx
push ebx
push dword [ebp + 8]
call sym.GrooveUtil.DLL_public:_static_unsigned_long_long_unsigned___int64____stdcall_GCFileInterface::Seek_void___long_long___int64___unsigned_long_int_
mov dword [ebp - 0x64], eax
mov dword [ebp - 0x60], edx
lea eax, [ebp - 0x6c]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 9
mov eax, dword [eax + 4]
or dword [ebp - 0x18], 1
push ebx
lea ecx, [ebp - 0x24]
push ecx
push dword [ebp - 0x34]
push eax
push dword [ebp + 8]
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x68f0fbcd
mov eax, dword [ebp - 0x24]
xor ecx, ecx
cmp eax, dword [ebp - 0x34]
jne 0x68f0fbcd
cmp ecx, edi
jne 0x68f0fbcd
xor bl, bl
jmp 0x68f0fbcf
mov bl, 1
mov dword [ebp - 4], 7
test byte [ebp - 0x18], 1
je 0x68f0fbf5
and dword [ebp - 0x18], 0xfffffffe
cmp dword [ebp - 0x6c], 0
je 0x68f0fbf5
cmp dword [ebp - 0x68], 0
je 0x68f0fbf5
push dword [ebp - 0x6c]
call dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
test bl, bl
je 0x68f0fc20
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
test eax, eax
jg 0x68f0fc09
call esi
jmp 0x68f0fc15
call esi
and eax, 0xffff
or eax, 0x80070000
push eax
push 0x2e6e7434
call fcn.68ef1014
cmp byte [ebp + 0x20], 0
je 0x68f0fd4e
xor esi, esi
push esi
push dword [ebp - 0x60]
push dword [ebp - 0x64]
push dword [ebp + 8]
call sym.GrooveUtil.DLL_public:_static_unsigned_long_long_unsigned___int64____stdcall_GCFileInterface::Seek_void___long_long___int64___unsigned_long_int_
lea eax, [ebp - 0x74]
push eax
lea eax, [ebp - 0x1c]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 0xa
mov eax, dword [eax + 4]
or dword [ebp - 0x18], 2
push esi
lea ecx, [ebp - 0x28]
push ecx
push dword [ebp - 0x34]
push eax
push dword [ebp + 8]
call dword [sym.imp.KERNEL32.dll_ReadFile]
test eax, eax
je 0x68f0fc7b
mov eax, dword [ebp - 0x28]
xor ecx, ecx
cmp eax, dword [ebp - 0x34]
jne 0x68f0fc7b
cmp ecx, edi
jne 0x68f0fc7b
xor bl, bl
jmp 0x68f0fc7d
mov bl, 1
mov dword [ebp - 4], 7
test byte [ebp - 0x18], 2
je 0x68f0fca1
and dword [ebp - 0x18], 0xfffffffd
cmp dword [ebp - 0x74], esi
je 0x68f0fca1
cmp dword [ebp - 0x70], esi
je 0x68f0fca1
push dword [ebp - 0x74]
call dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
test bl, bl
je 0x68f0fccc
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
test eax, eax
jg 0x68f0fcb5
call esi
jmp 0x68f0fcc1
call esi
and eax, 0xffff
or eax, 0x80070000
push eax
push 0x2e6e7435
call fcn.68ef1014
lea eax, [ebp - 0x84]
push eax
lea eax, [ebp - 0x1c]
push eax
call fcn.68f0ff91
mov esi, eax
mov byte [ebp - 4], 0xb
lea eax, [ebp - 0x7c]
push eax
lea eax, [ebp - 0x14]
push eax
call fcn.68f0ff91
mov byte [ebp - 4], 0xc
mov eax, dword [eax + 4]
mov edi, dword [esi + 4]
mov ecx, dword [ebp - 0x34]
mov esi, eax
xor eax, eax
repe cmpsb byte [esi], byte es:[edi]
sete bl
mov byte [ebp - 4], 0xb
cmp dword [ebp - 0x7c], eax
je 0x68f0fd1c
cmp dword [ebp - 0x78], eax
je 0x68f0fd1c
push dword [ebp - 0x7c]
call dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
mov byte [ebp - 4], 7
cmp dword [ebp - 0x84], 0
je 0x68f0fd3b
cmp dword [ebp - 0x80], 0
je 0x68f0fd3b
push dword [ebp - 0x84]
call dword [sym.imp.OLEAUT32.dll_SafeArrayGetElement]
test bl, bl
jne 0x68f0fd4e
push 0x80004005
push 0x2e6e7436
call fcn.68ef1014
xor eax, eax
cmp dword [ebp + 0x14], eax
jb 0x68f0fd72
ja 0x68f0fd5f
mov ecx, dword [ebp + 0x10]
cmp ecx, dword [ebp + 0x1c]
jbe 0x68f0fd72
mov ecx, dword [ebp + 0x1c]
sub dword [ebp + 0x10], ecx
mov ecx, dword [ebp + 0x10]
sbb dword [ebp + 0x14], eax
xor ebx, ebx
jmp 0x68f0fb1a
cmp byte [ebp + 0x20], 0
je 0x68f0fd80
lea esi, [ebp - 0x1c]
call fcn.68f0fe61
lea esi, [ebp - 0x14]
call fcn.68f0fe61
cmp byte [ebp + 0x24], 0
je 0x68f0fdc2
push dword [ebp + 8]
call dword [sym.imp.KERNEL32.dll_FlushFileBuffers]
test eax, eax
jne 0x68f0fdc2
mov esi, dword [sym.imp.KERNEL32.dll_GetLastError]
call esi
test eax, eax
jg 0x68f0fdab
call esi
jmp 0x68f0fdb7
call esi
and eax, 0xffff
or eax, 0x80070000
push eax
push 0x2e6e7437
call fcn.68ef1014
mov byte [ebp - 4], 0
lea ecx, [ebp - 0x1c]
call sym.GrooveUtil.DLL_private:_void___thiscall_GCSafeArray::Release_void_
or dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x14]
call sym.GrooveUtil.DLL_private:_void___thiscall_GCSafeArray::Release_void_
call fcn.68f54d3a
ret 0x2c