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

Disassembly:
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x44dd29
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.00405ae0
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 0x40867a
mov ecx, dword [esp + 0x244]
push str.No_source.
mov eax, dword [ecx]
jmp 0x4090ad
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 0x40909f
cmp dword [esp + 0x14], 4
jne 0x40909f
cmp dword [esp + 0x44], 0x6d27e59b
je 0x4086c7
mov ecx, dword [esp + 0x244]
push str.File_marker_is_invalid.
mov edx, dword [ecx]
call dword [edx + 0x14]
jmp 0x4090b0
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 0x4086f6
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_entry_type.
mov eax, dword [ecx]
jmp 0x4090ad
mov al, byte [esp + 0x12]
test al, al
jne 0x408716
mov ecx, dword [esp + 0x244]
push str.Found_end_of_archive.
mov edx, dword [ecx]
call dword [edx + 0x14]
mov al, 1
jmp 0x4090b2
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 0x40908c
mov eax, dword [esp + 0x2c]
cmp ax, bp
je 0x40908c
and eax, 0xffff
push eax
lea ebx, [eax + 5]
call fcn.0041e540
mov esi, eax
add esp, 4
cmp esi, ebp
je 0x4090b0
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 0x40879e
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_filename
mov eax, dword [ecx]
call dword [eax + 0x14]
push esi
call fcn.00428cbf
add esp, 4
jmp 0x4090b0
lea ecx, [esp + 0x70]
call fcn.00406c80
mov al, byte [edi + 0x15c]
mov dword [esp + 0x220], ebp
mov ebp, dword [esp + 0x244]
test al, al
je 0x40884b
lea ecx, [esp + 0x50]
call fcn.0040f650
mov ecx, dword [esp + 0x2c]
mov byte [esp + 0x220], 1
and ecx, 0xffff
push ecx
push esi
lea ecx, [esp + 0x58]
call fcn.004103d0
lea ecx, [esp + 0x98]
call fcn.0040f650
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.00422b40
lea ecx, [esp + 0x98]
push ecx
lea ecx, [esp + 0x74]
call fcn.00406050
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], 1
call fcn.0040fe20
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0
call fcn.0040fe20
jmp 0x408860
mov edx, dword [esp + 0x2c]
lea ecx, [esp + 0x70]
and edx, 0xffff
push edx
push esi
call fcn.00406730
push esi
call fcn.00428cbf
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 0x4088b6
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.00406f80
jmp 0x4090b0
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 0x40890c
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.00406f80
jmp 0x4090b0
mov al, byte [esp + 0x12]
cmp al, 1
jne 0x408a47
mov ecx, dword [esp + 0x238]
mov bl, byte [esp + 0x228]
test bl, bl
mov byte [ecx], al
jne 0x408971
mov edx, dword [esp + 0x23c]
push ebp
push edx
lea ecx, [esp + 0x78]
call fcn.004276a0
push eax
call fcn.00410bf0
add esp, 0xc
test al, al
jne 0x408971
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.00406f80
jmp 0x4090b0
lea ecx, [esp + 0x190]
call fcn.00409ba0
lea ecx, [esp + 0x70]
mov byte [esp + 0x220], 3
call fcn.004276a0
push eax
lea ecx, [esp + 0x194]
call fcn.00409e40
lea ecx, [esp + 0x190]
call fcn.0040a900
mov ecx, dword [esp + 0x234]
push eax
call fcn.004078d0
test bl, bl
jne 0x408a1d
lea ecx, [esp + 0x34]
call fcn.0041ede0
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.0040ec10
add esp, 0x10
test al, al
je 0x408a0c
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.0041ee50
lea ecx, [esp + 0x34]
mov byte [esp + 0x220], 3
call fcn.0041ee90
mov ecx, dword [esp + 0x230]
test ecx, ecx
je 0x408a33
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 0x409065
cmp al, 2
jne 0x40906a
mov bl, byte [esp + 0x228]
test bl, bl
jne 0x408b11
lea ecx, [esp + 0x98]
call fcn.00406c80
lea eax, [esp + 0x98]
push 0
push eax
lea ecx, [esp + 0x78]
mov byte [esp + 0x228], 5
call fcn.004276a0
push eax
call fcn.00410b30
add esp, 0xc
test al, al
jne 0x408afd
lea ecx, [esp + 0x98]
push ebp
push ecx
lea ecx, [esp + 0x78]
call fcn.004276a0
push eax
call fcn.00410b30
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.004276a0
push eax
push str.filename
mov ecx, ebp
call dword [esi + 0x2c]
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], bl
call fcn.00406f80
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f80
jmp 0x4090b0
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], 0
call fcn.00406f80
lea ecx, [esp + 0xe8]
call fcn.00409ba0
lea ecx, [esp + 0x70]
mov byte [esp + 0x220], 6
call fcn.004276a0
push eax
lea ecx, [esp + 0xec]
call fcn.00409e40
lea ecx, [esp + 0xe8]
call fcn.0040a900
mov ecx, dword [esp + 0x234]
push eax
call fcn.004078d0
lea ecx, [esp + 0x34]
call fcn.0041ede0
xor al, al
mov byte [esp + 0x220], 7
test bl, bl
jne 0x408b9f
mov al, byte [esp + 0x40]
push ebp
test al, 2
lea eax, [esp + 0x2c]
lea ecx, [esp + 0xec]
push eax
push ecx
je 0x408b90
lea edx, [esp + 0x40]
push edx
call fcn.0040eb50
add esp, 0x10
jmp 0x408b9f
lea edx, [esp + 0x40]
push 0x47
push edx
call fcn.0040eb10
add esp, 0x14
xor cl, cl
test bl, bl
jne 0x408bc0
test al, al
jne 0x408bc0
push str.Thumbs.db
lea ecx, [esp + 0xec]
call fcn.0040a6f0
test al, al
je 0x408bf3
mov cl, 1
test cl, cl
mov dword [esp + 0x28], 0
je 0x408c5d
push 4
call fcn.0042917b
add esp, 4
mov dword [esp + 0x1c], eax
test eax, eax
mov byte [esp + 0x220], 8
je 0x408c3e
mov ecx, eax
call fcn.00423c70
jmp 0x408c40
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.0041ee90
lea ecx, [esp + 0xe8]
mov byte [esp + 0x220], 0
call fcn.00409c70
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
call fcn.00406f80
jmp 0x4090b0
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 0x408ce6
test bl, bl
je 0x408c98
push 4
call fcn.0042917b
add esp, 4
mov dword [esp + 0x1c], eax
test eax, eax
mov byte [esp + 0x220], 9
je 0x408c8c
mov ecx, eax
call fcn.00423c70
mov byte [esp + 0x220], 7
jmp 0x408ce0
xor eax, eax
mov byte [esp + 0x220], 7
jmp 0x408ce0
push 0xb0
call fcn.0042917b
mov esi, eax
add esp, 4
mov dword [esp + 0x28], esi
test esi, esi
mov byte [esp + 0x220], 0xa
je 0x408cd2
lea edx, [esp + 0x34]
lea ecx, [esp + 0xe8]
push edx
call fcn.0040a900
push eax
mov ecx, esi
call fcn.004232a0
jmp 0x408cd4
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.00422ca0
lea ecx, [esp + 0x170]
mov byte [esp + 0x220], 0xb
call fcn.0040f650
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0xc
call fcn.0040f650
push 0x1f4240
lea ecx, [esp + 0x54]
mov byte [esp + 0x224], 0xd
call fcn.0040fe90
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 0x408f6d
mov eax, dword [esp + 0x20]
test eax, eax
je 0x408fa0
test eax, 0x80000000
je 0x408d91
and eax, 0x7fffffff
mov byte [esp + 0x13], 0
mov dword [esp + 0x20], eax
cmp eax, 0x1f4240
jae 0x408f7c
mov edx, dword [edi + 0x190]
test edx, edx
je 0x408fa0
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 0x408f8b
lea ecx, [esp + 0xc0]
call fcn.0040f650
mov al, byte [edi + 0x15c]
mov bl, 0xe
test al, al
mov byte [esp + 0x220], bl
je 0x408e5a
lea ecx, [esp + 0x98]
call fcn.0040f650
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.0040fff0
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.00422b40
lea ecx, [esp + 0x98]
call fcn.0040f570
lea ecx, [esp + 0x98]
mov byte [esp + 0x220], bl
call fcn.0040fe20
jmp 0x408e79
mov edx, dword [esp + 0x24]
mov eax, dword [edi + 0x190]
push edx
push eax
lea ecx, [esp + 0xc8]
call fcn.0040fff0
mov ebp, dword [esp + 0x244]
mov al, byte [esp + 0x13]
test al, al
je 0x408ef7
lea ecx, [esp + 0x50]
call fcn.0040f260
lea ecx, [esp + 0x50]
lea edx, [esp + 0xc0]
push ecx
push edx
lea ecx, [esp + 0x38]
call fcn.00422ce0
push ebp
lea ecx, [esp + 0x54]
call fcn.0040f2a0
push eax
push 1
lea ecx, [esp + 0x5c]
call fcn.004276a0
mov ebx, dword [esp + 0x28]
push eax
mov ecx, ebx
call fcn.00423d40
test esi, esi
je 0x408f3e
mov ebp, dword [esi]
lea ecx, [esp + 0x50]
call fcn.0040f2a0
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 0x408f3e
push ebp
push 1
lea ecx, [esp + 0xc8]
call fcn.0040f2a0
push eax
lea ecx, [esp + 0xcc]
call fcn.004276a0
mov ebx, dword [esp + 0x28]
push eax
mov ecx, ebx
call fcn.00423d40
test esi, esi
je 0x408f3e
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 0x408f54
lea ecx, [esp + 0xc0]
call fcn.0040f570
lea ecx, [esp + 0xc0]
mov byte [esp + 0x220], 0xd
call fcn.0040fe20
jmp 0x408d3b
mov eax, dword [ebp]
push str.Failed_to_read_compressed_size.
mov ecx, ebp
call dword [eax + 0x14]
jmp 0x408fa0
mov edx, dword [ebp]
push str.Too_much_data.
mov ecx, ebp
call dword [edx + 0x14]
jmp 0x408fa0
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 0x409002
mov ecx, esi
call fcn.00423450
test al, al
je 0x409002
lea ecx, [esp + 0xc0]
call fcn.00423850
lea ecx, [esp + 0x48]
push ecx
lea ecx, [esp + 0xc4]
call fcn.004238b0
lea edx, [esp + 0xc0]
push 0
push edx
mov ecx, esi
call fcn.00423020
mov ecx, esi
call fcn.00423420
mov eax, dword [esp + 0x40]
cmp eax, 0x20
je 0x409002
push eax
lea eax, [esp + 0xec]
push eax
call fcn.0040d8b0
add esp, 8
test ebx, ebx
je 0x40900f
mov edx, dword [ebx]
push 1
mov ecx, ebx
call dword [edx + 8]
lea ecx, [esp + 0x50]
mov byte [esp + 0x220], 0xc
call fcn.0040fe20
lea ecx, [esp + 0x170]
mov byte [esp + 0x220], 0xb
call fcn.0040fe20
lea ecx, [esp + 0x30]
mov byte [esp + 0x220], 7
call fcn.00422cd0
lea ecx, [esp + 0x34]
mov byte [esp + 0x220], 6
call fcn.0041ee90
mov byte [esp + 0x220], 0
lea ecx, [esp + 0xe8]
call fcn.00409c70
mov eax, dword [esp + 0x22c]
lea ecx, [esp + 0x70]
mov dword [esp + 0x220], 0xffffffff
mov byte [eax], 0
call fcn.00406f80
mov al, 1
jmp 0x4090b2
mov ecx, dword [esp + 0x244]
push str.Failed_to_get_filename_length
mov edx, dword [ecx]
call dword [edx + 0x14]
jmp 0x4090b0
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