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

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0xa8
pxor xmm0, xmm0
lea r15, [rsp + 0x40]
mov rsi, rcx
mov r14, rdx
movaps xmmword [rsp + 0x70], xmm0
mov qword [rsp + 0x100], r8
lea rdx, section..rdata
mov r8d, 0x58
mov rcx, r15
mov qword [rsp + 0x108], r9
mov qword [rsp + 0x80], 0
mov dword [rsp + 0x48], 0
mov qword [rsp + 0x40], 0
call fcn.00409a40
mov ebx, eax
test eax, eax
jne 0x40187b
mov ecx, 0x2000
call sub.msvcrt.dll_malloc
mov r12, rax
test rax, rax
je 0x4018da
mov ecx, 0x2000
call sub.msvcrt.dll_malloc
mov r13, rax
test rax, rax
je 0x4018bb
mov edi, dword [r14 + 8]
mov ebx, 0x2000
mov r9, qword [rsi]
mov edx, 1
mov rcx, r12
cmp rdi, rbx
cmovbe rbx, rdi
mov r8, rbx
call sub.msvcrt.dll_fread
cmp rax, rbx
jne 0x401775
mov rcx, qword [rsi]
call sub.msvcrt.dll_ferror
test eax, eax
jne 0x401775
mov qword [rsp + 0x40], r12
mov qword [rsp + 0x20], rdi
mov dword [rsp + 0x34], eax
mov dword [rsp + 0x48], ebx
mov qword [rsp + 0x28], rbx
mov rbx, r13
mov r13, rsi
xor edx, edx
mov rcx, r15
mov qword [rsp + 0x50], rbx
mov dword [rsp + 0x58], 0x2000
call fcn.00409af0
mov ebp, eax
cmp eax, 0xffffffff
jge 0x401750
cmp eax, 0xfffffffc
jge 0x4017b0
mov edx, dword [rsp + 0x58]
mov r8d, 0x2000
sub r8, rdx
mov rax, rdx
cmp qword [rsp + 0x100], 0
je 0x4017c0
mov r9, qword [rsp + 0x100]
mov edx, 1
mov rcx, rbx
mov qword [rsp + 0x38], r8
call sub.msvcrt.dll_fwrite
mov r8, qword [rsp + 0x38]
cmp rax, r8
jne 0x40186d
mov rcx, qword [rsp + 0x100]
call sub.msvcrt.dll_ferror
test eax, eax
jne 0x40186d
mov eax, dword [rsp + 0x58]
test eax, eax
je 0x401688
mov rdi, qword [rsp + 0x20]
mov rsi, r13
mov r13, rbx
mov rbx, qword [rsp + 0x28]
mov eax, dword [rsp + 0x34]
sub rdi, rbx
cmp ebp, 1
je 0x4018f3
test rdi, rdi
jne 0x401633
mov r10d, ebp
mov ebx, eax
cmp ebp, 1
je 0x40177a
jmp 0x401762
cmp eax, 2
jne 0x4016b3
mov r13, rbx
mov r10d, 0xfffffffd
lea rdx, [r14 + 0x12]
mov r8d, r10d
lea rcx, str.Failed_to_extract__s:_decompression_resulted_in_return_code__d__n
call fcn.00402b50
mov ebx, 0xffffffff
mov rcx, r15
call fcn.0040b8d0
mov rcx, r12
call sub.msvcrt.dll_free
mov rcx, r13
call sub.msvcrt.dll_free
mov eax, ebx
add rsp, 0xa8
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov r13, rbx
mov r10d, eax
jmp 0x401762
cmp qword [rsp + 0x108], 0
je 0x401713
cmp r8, 8
jae 0x401820
test r8b, 4
jne 0x401898
test r8, r8
je 0x401810
movzx edx, byte [rbx]
mov rsi, qword [rsp + 0x108]
mov byte [rsi], dl
test r8b, 2
je 0x401810
movzx edx, word [rbx + r8 - 2]
mov rsi, qword [rsp + 0x108]
mov word [rsi + r8 - 2], dx
nop dword [rax + rax]
add qword [rsp + 0x108], r8
jmp 0x401713
mov rdx, qword [rbx]
mov rdi, qword [rsp + 0x108]
mov qword [rdi], rdx
mov rsi, qword [rsp + 0x108]
mov rdx, qword [rbx + r8 - 8]
mov qword [rsi + r8 - 8], rdx
mov rdi, qword [rsp + 0x108]
mov rsi, rbx
mov rcx, qword [rsp + 0x108]
add rdi, 8
and rdi, 0xfffffffffffffff8
sub rcx, rdi
sub rsi, rcx
add rcx, r8
shr rcx, 3
rep movsq qword [rdi], qword [rsi]
jmp 0x401810
mov r13, rbx
mov r10d, 0xffffffff
jmp 0x401762
lea rdx, [r14 + 0x12]
mov r8d, eax
mov ebx, 0xffffffff
lea rcx, str.Failed_to_extract__s:_inflateInit___failed_with_return_code__d__n
call fcn.00402b50
jmp 0x401792
mov edx, dword [rbx]
mov rsi, qword [rsp + 0x108]
mov dword [rsi], edx
mov edx, dword [rbx + r8 - 4]
mov rsi, qword [rsp + 0x108]
mov dword [rsi + r8 - 4], edx
jmp 0x401810
lea r8, [r14 + 0x12]
lea rdx, str.Failed_to_extract__s:_failed_to_allocate_temporary_output_buffer__n
lea rcx, str.malloc
call fcn.00402cd0
xor r13d, r13d
jmp 0x40177a
lea r8, [r14 + 0x12]
lea rdx, str.Failed_to_extract__s:_failed_to_allocate_temporary_input_buffer__n
lea rcx, str.malloc
call fcn.00402cd0
jmp 0x4018d2
mov ebx, eax
jmp 0x40177a