Function at 0x408600
Capabilities:
Resolve function by parsing pe exports

Disassembly:
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x44dd09
push eax
mov dword fs:[0], esp
sub esp, 0x208
push ebx
push ebp
push esi
push edi
mov edi, ecx
mov ecx, dword [esp + 0x234]
call fcn.00405ad0
mov eax, dword [esp + 0x238]
mov ecx, dword [esp + 0x240]
mov edx, dword [esp + 0x22c]
xor ebp, ebp
mov byte [eax], 0
mov byte [ecx], 0
mov byte [edx], 1
mov ecx, dword [edi + 0x158]
cmp ecx, ebp
jne 0x40866a
mov ecx, dword [esp + 0x244]
push str.No_source.
mov eax, dword [ecx]
jmp 0x40909d
lea eax, [esp + 0x14]
push ebp
push eax
mov dword [esp + 0x1c], ebp
mov dword [esp + 0x4c], ebp
mov edx, dword [ecx]
lea eax, [esp + 0x4c]
push 4
push eax
call dword [edx + 4]
test al, al
je 0x40908f
cmp dword [esp + 0x14], 4
jne 0x40908f
cmp dword [esp + 0x44], 0x6d27e59b
je 0x4086b7
mov ecx, dword [esp + 0x244]
push str.File_marker_is_invalid.
mov edx, dword [ecx]
call dword [edx + 0x14]
jmp 0x4090a0
mov ecx, dword [edi + 0x158]
lea edx, [esp + 0x14]
push ebp
push edx
mov eax, dword [ecx]
lea edx, [esp + 0x1a]
push 1
push edx
call dword [eax + 4]
test al, al
jne 0x4086e6
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_entry_type.
mov eax, dword [ecx]
jmp 0x40909d
mov al, byte [esp + 0x12]
test al, al
jne 0x408706
mov ecx, dword [esp + 0x244]
push str.Found_end_of_archive.
mov edx, dword [ecx]
call dword [edx + 0x14]
mov al, 1
jmp 0x4090a2
mov ecx, dword [edi + 0x158]
lea edx, [esp + 0x14]
push ebp
push edx
mov eax, dword [ecx]
lea edx, [esp + 0x34]
push 2
push edx
call dword [eax + 4]
test al, al
je 0x40907c
mov eax, dword [esp + 0x2c]
cmp ax, bp
je 0x40907c
and eax, 0xffff
push eax
lea ebx, [eax + 5]
call fcn.0041e4b0
mov esi, eax
add esp, 4
cmp esi, ebp
je 0x4090a0
mov ecx, dword [edi + 0x158]
lea edx, [esp + 0x14]
push ebp
push edx
mov edx, dword [esp + 0x34]
mov eax, dword [ecx]
and edx, 0xffff
push edx
push esi
call dword [eax + 4]
test al, al
jne 0x40878e
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_filename
mov eax, dword [ecx]
call dword [eax + 0x14]
push esi
call fcn.00428c8f
add esp, 4
jmp 0x4090a0
lea ecx, [esp + 0x70]
call fcn.00406c70
mov al, byte [edi + 0x15c]
mov dword [esp + 0x220], ebp
mov ebp, dword [esp + 0x244]
test al, al
je 0x40883b
lea ecx, [esp + 0x50]
call fcn.0040f610
mov ecx, dword [esp + 0x2c]
mov byte [esp + 0x220], 1
and ecx, 0xffff
push ecx
push esi
lea ecx, [esp + 0x58]
call fcn.00410390
lea ecx, [esp + 0x98]
call fcn.0040f610
lea edx, [esp + 0x98]
push ebp
lea eax, [esp + 0x54]
push edx
push eax
lea ecx, [edi + 8]
mov byte [esp + 0x22c], 2
call fcn.00422a90
lea ecx, [esp + 0x98]
push ecx
lea ecx, [esp + 0x74]
call fcn.00406040
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], 1
call fcn.0040fde0
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0
call fcn.0040fde0
jmp 0x408850
mov edx, dword [esp + 0x2c]
lea ecx, [esp + 0x70]
and edx, 0xffff
push edx
push esi
call fcn.00406720
push esi
call fcn.00428c8f
mov ecx, dword [edi + 0x158]
add esp, 4
lea edx, [esp + 0x14]
add ebx, 0xc
mov eax, dword [ecx]
push 0
push edx
lea edx, [esp + 0xe8]
push 8
push edx
mov dword [esp + 0x28], ebx
call dword [eax + 4]
test al, al
jne 0x4088a6
mov eax, dword [ebp]
push str.Failed_to_get_filetime
mov ecx, ebp
call dword [eax + 0x14]
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f70
jmp 0x4090a0
lea ecx, [esp + 0x48]
lea edx, [esp + 0xe0]
push ecx
push edx
call dword [sym.imp.KERNEL32.dll_LocalFileTimeToFileTime]
mov ecx, dword [edi + 0x158]
lea edx, [esp + 0x14]
push 0
push edx
mov eax, dword [ecx]
lea edx, [esp + 0x48]
push 4
push edx
call dword [eax + 4]
test al, al
jne 0x4088fc
mov eax, dword [ebp]
push str.Failed_to_get_file_attributes
mov ecx, ebp
call dword [eax + 0x14]
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f70
jmp 0x4090a0
mov al, byte [esp + 0x12]
cmp al, 1
jne 0x408a37
mov ecx, dword [esp + 0x238]
mov bl, byte [esp + 0x228]
test bl, bl
mov byte [ecx], al
jne 0x408961
mov edx, dword [esp + 0x23c]
push ebp
push edx
lea ecx, [esp + 0x78]
call fcn.00427660
push eax
call fcn.00410bb0
add esp, 0xc
test al, al
jne 0x408961
mov eax, dword [ebp]
push str.Failed_to_ensure_directory_exists.
mov ecx, ebp
call dword [eax + 0x14]
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f70
jmp 0x4090a0
lea ecx, [esp + 0x190]
call fcn.00409b70
lea ecx, [esp + 0x70]
mov byte [esp + 0x220], 3
call fcn.00427660
push eax
lea ecx, [esp + 0x194]
call fcn.00409e10
lea ecx, [esp + 0x190]
call fcn.0040a8d0
mov ecx, dword [esp + 0x234]
push eax
call fcn.004078c0
test bl, bl
jne 0x408a0d
lea ecx, [esp + 0x34]
call fcn.0041ed50
lea ecx, [esp + 0x30]
push 0
lea edx, [esp + 0x194]
push ecx
lea eax, [esp + 0x3c]
push edx
push eax
mov byte [esp + 0x230], 4
call fcn.0040ebc0
add esp, 0x10
test al, al
je 0x4089fc
lea ecx, [esp + 0x48]
lea edx, [esp + 0x48]
push ecx
mov ecx, dword [esp + 0x3c]
lea eax, [esp + 0x4c]
push edx
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_SetFileTime]
lea ecx, [esp + 0x34]
call fcn.0041edc0
lea ecx, [esp + 0x34]
mov byte [esp + 0x220], 3
call fcn.0041ee00
mov ecx, dword [esp + 0x230]
test ecx, ecx
je 0x408a23
mov eax, dword [esp + 0x18]
mov edx, dword [ecx]
push eax
push eax
call dword [edx + 4]
mov byte [esp + 0x220], 0
lea ecx, [esp + 0x190]
jmp 0x409055
cmp al, 2
jne 0x40905a
mov bl, byte [esp + 0x228]
test bl, bl
jne 0x408b01
lea ecx, [esp + 0x98]
call fcn.00406c70
lea eax, [esp + 0x98]
push 0
push eax
lea ecx, [esp + 0x78]
mov byte [esp + 0x228], 5
call fcn.00427660
push eax
call fcn.00410af0
add esp, 0xc
test al, al
jne 0x408aed
lea ecx, [esp + 0x98]
push ebp
push ecx
lea ecx, [esp + 0x78]
call fcn.00427660
push eax
call fcn.00410af0
mov edx, dword [ebp]
add esp, 0xc
mov ecx, ebp
push str.Failed_to_ensure_file_can_be_created.
call dword [edx + 0x14]
mov esi, dword [ebp]
lea ecx, [esp + 0x70]
call fcn.00427660
push eax
push str.filename
mov ecx, ebp
call dword [esi + 0x2c]
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], bl
call fcn.00406f70
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f70
jmp 0x4090a0
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], 0
call fcn.00406f70
lea ecx, [esp + 0xe8]
call fcn.00409b70
lea ecx, [esp + 0x70]
mov byte [esp + 0x220], 6
call fcn.00427660
push eax
lea ecx, [esp + 0xec]
call fcn.00409e10
lea ecx, [esp + 0xe8]
call fcn.0040a8d0
mov ecx, dword [esp + 0x234]
push eax
call fcn.004078c0
lea ecx, [esp + 0x34]
call fcn.0041ed50
xor al, al
mov byte [esp + 0x220], 7
test bl, bl
jne 0x408b8f
mov al, byte [esp + 0x40]
push ebp
test al, 2
lea eax, [esp + 0x2c]
lea ecx, [esp + 0xec]
push eax
push ecx
je 0x408b80
lea edx, [esp + 0x40]
push edx
call fcn.0040eb00
add esp, 0x10
jmp 0x408b8f
lea edx, [esp + 0x40]
push 0x47
push edx
call fcn.0040eac0
add esp, 0x14
xor cl, cl
test bl, bl
jne 0x408bb0
test al, al
jne 0x408bb0
push str.Thumbs.db
lea ecx, [esp + 0xec]
call fcn.0040a6c0
test al, al
je 0x408be3
mov cl, 1
test cl, cl
mov dword [esp + 0x28], 0
je 0x408c4d
push 4
call fcn.0042914b
add esp, 4
mov dword [esp + 0x1c], eax
test eax, eax
mov byte [esp + 0x220], 8
je 0x408c2e
mov ecx, eax
call fcn.00423bc0
jmp 0x408c30
mov eax, dword [ebp]
push str.Failed_to_open_file.
mov ecx, ebp
call dword [eax + 0x14]
lea ecx, [esp + 0x34]
mov byte [esp + 0x220], 6
call fcn.0041ee00
lea ecx, [esp + 0xe8]
mov byte [esp + 0x220], 0
call fcn.00409c40
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f70
jmp 0x4090a0
xor eax, eax
mov ecx, dword [esp + 0x240]
mov ebx, eax
mov byte [esp + 0x220], 7
mov dword [esp + 0x1c], ebx
mov byte [ecx], 1
jmp 0x408cd6
test bl, bl
je 0x408c88
push 4
call fcn.0042914b
add esp, 4
mov dword [esp + 0x1c], eax
test eax, eax
mov byte [esp + 0x220], 9
je 0x408c7c
mov ecx, eax
call fcn.00423bc0
mov byte [esp + 0x220], 7
jmp 0x408cd0
xor eax, eax
mov byte [esp + 0x220], 7
jmp 0x408cd0
push 0xb0
call fcn.0042914b
mov esi, eax
add esp, 4
mov dword [esp + 0x28], esi
test esi, esi
mov byte [esp + 0x220], 0xa
je 0x408cc2
lea edx, [esp + 0x34]
lea ecx, [esp + 0xe8]
push edx
call fcn.0040a8d0
push eax
mov ecx, esi
call fcn.004231f0
jmp 0x408cc4
xor eax, eax
mov byte [esp + 0x220], 7
mov dword [esp + 0x28], eax
mov ebx, eax
mov dword [esp + 0x1c], ebx
xor eax, eax
lea ecx, [esp + 0x30]
mov dword [esp + 0x24], eax
mov dword [esp + 0x20], eax
call fcn.00422bf0
lea ecx, [esp + 0x170]
mov byte [esp + 0x220], 0xb
call fcn.0040f610
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0xc
call fcn.0040f610
push 0x1f4240
lea ecx, [esp + 0x54]
mov byte [esp + 0x224], 0xd
call fcn.0040fe50
mov esi, dword [esp + 0x230]
mov eax, dword [esp + 0x18]
mov ecx, dword [edi + 0x158]
lea edx, [esp + 0x24]
add eax, 4
push 0
push edx
mov dword [esp + 0x20], eax
mov eax, dword [ecx]
lea edx, [esp + 0x28]
push 4
push edx
mov byte [esp + 0x23], 1
call dword [eax + 4]
mov eax, dword [esp + 0x24]
test eax, eax
je 0x408f5d
mov eax, dword [esp + 0x20]
test eax, eax
je 0x408f90
test eax, 0x80000000
je 0x408d81
and eax, 0x7fffffff
mov byte [esp + 0x13], 0
mov dword [esp + 0x20], eax
cmp eax, 0x1f4240
jae 0x408f6c
mov edx, dword [edi + 0x190]
test edx, edx
je 0x408f90
mov ecx, dword [edi + 0x158]
lea ebp, [esp + 0x24]
push 0
push ebp
mov ebx, dword [ecx]
push eax
push edx
call dword [ebx + 4]
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x20]
cmp eax, ecx
jne 0x408f7b
lea ecx, [esp + 0xc0]
call fcn.0040f610
mov al, byte [edi + 0x15c]
mov bl, 0xe
test al, al
mov byte [esp + 0x220], bl
je 0x408e4a
lea ecx, [esp + 0x98]
call fcn.0040f610
mov ecx, dword [esp + 0x24]
mov edx, dword [edi + 0x190]
push ecx
push edx
lea ecx, [esp + 0xa0]
mov byte [esp + 0x228], 0xf
call fcn.0040ffb0
mov ebp, dword [esp + 0x244]
lea eax, [esp + 0xc0]
push ebp
lea ecx, [esp + 0x9c]
push eax
push ecx
lea ecx, [edi + 8]
call fcn.00422a90
lea ecx, [esp + 0x98]
call fcn.0040f530
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], bl
call fcn.0040fde0
jmp 0x408e69
mov edx, dword [esp + 0x24]
mov eax, dword [edi + 0x190]
push edx
push eax
lea ecx, [esp + 0xc8]
call fcn.0040ffb0
mov ebp, dword [esp + 0x244]
mov al, byte [esp + 0x13]
test al, al
je 0x408ee7
lea ecx, [esp + 0x50]
call fcn.0040f210
lea ecx, [esp + 0x50]
lea edx, [esp + 0xc0]
push ecx
push edx
lea ecx, [esp + 0x38]
call fcn.00422c30
push ebp
lea ecx, [esp + 0x54]
call fcn.0040f250
push eax
push 1
lea ecx, [esp + 0x5c]
call fcn.00427660
mov ebx, dword [esp + 0x28]
push eax
mov ecx, ebx
call fcn.00423cc0
test esi, esi
je 0x408f2e
mov ebp, dword [esi]
lea ecx, [esp + 0x50]
call fcn.0040f250
mov edx, dword [esp + 0x20]
mov ecx, eax
mov eax, dword [esp + 0x18]
add ecx, eax
add edx, eax
push ecx
push edx
mov ecx, esi
call dword [ebp + 4]
mov ebp, dword [esp + 0x244]
mov dword [esp + 0x18], 0
jmp 0x408f2e
push ebp
push 1
lea ecx, [esp + 0xc8]
call fcn.0040f250
push eax
lea ecx, [esp + 0xcc]
call fcn.00427660
mov ebx, dword [esp + 0x28]
push eax
mov ecx, ebx
call fcn.00423cc0
test esi, esi
je 0x408f2e
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0x18]
mov edx, dword [esi]
add eax, ecx
push eax
push eax
mov ecx, esi
call dword [edx + 4]
mov dword [esp + 0x18], 0
mov al, byte [edi + 0x15c]
test al, al
jne 0x408f44
lea ecx, [esp + 0xc0]
call fcn.0040f530
lea ecx, [esp + 0xc0]
mov byte [esp + 0x220], 0xd
call fcn.0040fde0
jmp 0x408d2b
mov eax, dword [ebp]
push str.Failed_to_read_compressed_size.
mov ecx, ebp
call dword [eax + 0x14]
jmp 0x408f90
mov edx, dword [ebp]
push str.Too_much_data.
mov ecx, ebp
call dword [edx + 0x14]
jmp 0x408f90
mov ecx, dword [esp + 0x244]
push str.Failed_to_read_compressed_data.
mov eax, dword [ecx]
call dword [eax + 0x14]
mov ebx, dword [esp + 0x1c]
mov esi, dword [esp + 0x28]
test esi, esi
je 0x408ff2
mov ecx, esi
call fcn.004233a0
test al, al
je 0x408ff2
lea ecx, [esp + 0xc0]
call fcn.004237a0
lea ecx, [esp + 0x48]
push ecx
lea ecx, [esp + 0xc4]
call fcn.00423800
lea edx, [esp + 0xc0]
push 0
push edx
mov ecx, esi
call fcn.00422f70
mov ecx, esi
call fcn.00423370
mov eax, dword [esp + 0x40]
cmp eax, 0x20
je 0x408ff2
push eax
lea eax, [esp + 0xec]
push eax
call fcn.0040d860
add esp, 8
test ebx, ebx
je 0x408fff
mov edx, dword [ebx]
push 1
mov ecx, ebx
call dword [edx + 8]
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0xc
call fcn.0040fde0
lea ecx, [esp + 0x170]
mov byte [esp + 0x220], 0xb
call fcn.0040fde0
lea ecx, [esp + 0x30]
mov byte [esp + 0x220], 7
call fcn.00422c20
lea ecx, [esp + 0x34]
mov byte [esp + 0x220], 6
call fcn.0041ee00
mov byte [esp + 0x220], 0
lea ecx, [esp + 0xe8]
call fcn.00409c40
mov eax, dword [esp + 0x22c]
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
mov byte [eax], 0
call fcn.00406f70
mov al, 1
jmp 0x4090a2
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_filename_length
mov edx, dword [ecx]
call dword [edx + 0x14]
jmp 0x4090a0
mov ecx, dword [esp + 0x244]
push str.Failed_to_find_file_marker
mov eax, dword [ecx]
call dword [eax + 0x14]
xor al, al
mov ecx, dword [esp + 0x218]
pop edi
pop esi
pop ebp
pop ebx
mov dword fs:[0], ecx
add esp, 0x214
ret 0x20