Function at 0x4089d0
Capabilities:
Compute adler32 checksum
Enumerate pe sections

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x40
mov ebp, dword [esp + 0x54]
mov ecx, dword [esp + 0x58]
mov eax, ebp
movzx ebp, bp
shr eax, 0x10
cmp dword [esp + 0x5c], 1
mov dword [esp + 0x2c], eax
je 0x408d48
test ecx, ecx
je 0x408d7d
cmp dword [esp + 0x5c], 0xf
ja 0x408a62
mov eax, dword [esp + 0x5c]
test eax, eax
je 0x408a2a
mov edx, dword [esp + 0x5c]
mov eax, dword [esp + 0x2c]
add edx, ecx
add ecx, 1
movzx ebx, byte [ecx - 1]
add ebp, ebx
add eax, ebp
cmp ecx, edx
jne 0x408a17
mov dword [esp + 0x2c], eax
lea eax, [ebp - 0xfff1]
cmp ebp, 0xfff1
mov edx, 0x80078071
mov esi, dword [esp + 0x2c]
cmovae ebp, eax
mov eax, dword [esp + 0x2c]
mul edx
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
mov eax, esi
shl eax, 0x10
or eax, ebp
add esp, 0x40
pop ebx
pop esi
pop edi
pop ebp
ret
cmp dword [esp + 0x5c], 0x15af
jbe 0x408d87
mov eax, dword [esp + 0x5c]
sub eax, 0x15b0
mov dword [esp + 0x34], eax
lea eax, [ecx + 0x15b0]
mov dword [esp + 0x30], eax
mov esi, esi
lea edi, [edi]
movzx eax, byte [ecx]
add eax, ebp
mov esi, eax
movzx eax, byte [ecx + 1]
mov dword [esp], esi
mov edi, eax
movzx eax, byte [ecx + 2]
add edi, esi
mov dword [esp + 4], edi
mov ebx, eax
movzx eax, byte [ecx + 3]
add ebx, edi
mov dword [esp + 8], ebx
mov edx, eax
movzx eax, byte [ecx + 4]
add edx, ebx
mov dword [esp + 0xc], edx
mov ebp, eax
movzx eax, byte [ecx + 5]
add ebp, edx
mov dword [esp + 0x10], ebp
add eax, ebp
mov esi, eax
movzx eax, byte [ecx + 6]
mov dword [esp + 0x14], esi
add eax, esi
movzx esi, byte [ecx + 0xc]
mov edi, eax
movzx eax, byte [ecx + 7]
mov dword [esp + 0x18], edi
add eax, edi
movzx edi, byte [ecx + 0xb]
mov ebx, eax
movzx eax, byte [ecx + 8]
mov dword [esp + 0x1c], ebx
add eax, ebx
movzx ebx, byte [ecx + 0xd]
mov edx, eax
movzx eax, byte [ecx + 9]
mov dword [esp + 0x20], edx
add eax, edx
movzx edx, byte [ecx + 0xe]
mov ebp, eax
movzx eax, byte [ecx + 0xa]
mov dword [esp + 0x24], ebp
add eax, ebp
movzx ebp, byte [ecx + 0xf]
add edi, eax
mov dword [esp + 0x28], eax
mov eax, dword [esp]
add eax, dword [esp + 4]
add esi, edi
add eax, dword [esp + 8]
add ebx, esi
add eax, dword [esp + 0xc]
add edx, ebx
add eax, dword [esp + 0x10]
add ebp, edx
add eax, dword [esp + 0x14]
add eax, dword [esp + 0x18]
add eax, dword [esp + 0x1c]
add eax, dword [esp + 0x20]
add eax, dword [esp + 0x24]
add eax, dword [esp + 0x28]
add eax, edi
add eax, esi
add ebx, eax
add edx, ebx
add edx, ebp
add dword [esp + 0x2c], edx
add ecx, 0x10
cmp ecx, dword [esp + 0x30]
jne 0x408a90
mov eax, 0x80078071
mov esi, dword [esp + 0x2c]
mul ebp
shr edx, 0xf
imul eax, edx, 0xfff1
sub ebp, eax
mov eax, 0x80078071
mul esi
shr edx, 0xf
imul eax, edx, 0xfff1
sub esi, eax
cmp dword [esp + 0x34], 0x15af
mov eax, dword [esp + 0x34]
mov dword [esp + 0x2c], esi
jbe 0x408bb7
mov dword [esp + 0x5c], eax
jmp 0x408a70
test eax, eax
je 0x408d37
cmp eax, 0xf
jbe 0x408d94
mov eax, dword [esp + 0x34]
mov edx, ecx
mov dword [esp + 0x58], ecx
sub eax, 0x10
mov dword [esp + 0x3c], eax
shr eax, 4
mov dword [esp + 0x38], eax
add eax, 1
shl eax, 4
add eax, ecx
mov dword [esp + 0x30], eax
movzx eax, byte [edx]
add edx, 0x10
add eax, ebp
mov esi, eax
movzx eax, byte [edx - 0xf]
mov dword [esp + 4], esi
mov edi, eax
movzx eax, byte [edx - 0xe]
add edi, esi
mov dword [esp + 8], edi
mov ebx, eax
movzx eax, byte [edx - 0xd]
add ebx, edi
mov dword [esp + 0xc], ebx
mov ecx, eax
movzx eax, byte [edx - 0xc]
add ecx, ebx
movzx ebx, byte [edx - 6]
mov dword [esp + 0x10], ecx
mov ebp, eax
movzx eax, byte [edx - 0xb]
add ebp, ecx
movzx ecx, byte [edx - 5]
mov dword [esp + 0x14], ebp
add eax, ebp
mov esi, eax
movzx eax, byte [edx - 0xa]
mov dword [esp + 0x18], esi
add eax, esi
movzx esi, byte [edx - 7]
mov edi, eax
movzx eax, byte [edx - 9]
mov dword [esp + 0x1c], edi
add eax, edi
movzx edi, byte [edx - 8]
mov dword [esp + 0x20], eax
add edi, eax
movzx eax, byte [edx - 4]
add esi, edi
add ebx, esi
add ecx, ebx
lea ebp, [eax + ecx]
movzx eax, byte [edx - 3]
mov dword [esp], ebp
mov ebp, dword [esp]
add ebp, eax
movzx eax, byte [edx - 2]
mov dword [esp + 0x24], ebp
add eax, ebp
movzx ebp, byte [edx - 1]
mov dword [esp + 0x28], eax
add ebp, eax
mov eax, dword [esp + 4]
add eax, dword [esp + 8]
add eax, dword [esp + 0xc]
add eax, dword [esp + 0x10]
add eax, dword [esp + 0x14]
add eax, dword [esp + 0x18]
add eax, dword [esp + 0x1c]
add eax, dword [esp + 0x20]
add eax, edi
add eax, esi
add eax, ebx
add eax, ecx
add eax, dword [esp]
add eax, dword [esp + 0x24]
add eax, dword [esp + 0x28]
add eax, ebp
add dword [esp + 0x2c], eax
cmp edx, dword [esp + 0x30]
jne 0x408bec
mov eax, dword [esp + 0x3c]
mov ecx, dword [esp + 0x58]
mov esi, dword [esp + 0x34]
and eax, 0xfffffff0
lea ecx, [ecx + eax + 0x10]
mov eax, dword [esp + 0x38]
shl eax, 4
neg eax
lea eax, [esi + eax - 0x11]
and esi, 0xf
je 0x408d0e
lea edx, [ecx + eax + 1]
mov eax, dword [esp + 0x2c]
add ecx, 1
movzx ebx, byte [ecx - 1]
add ebp, ebx
add eax, ebp
cmp ecx, edx
jne 0x408cfb
mov dword [esp + 0x2c], eax
mov eax, ebp
mov ecx, 0x80078071
mul ecx
mov eax, edx
shr eax, 0xf
imul eax, eax, 0xfff1
sub ebp, eax
mov eax, dword [esp + 0x2c]
mul ecx
shr edx, 0xf
imul eax, edx, 0xfff1
sub dword [esp + 0x2c], eax
mov eax, dword [esp + 0x2c]
add esp, 0x40
pop ebx
pop esi
shl eax, 0x10
or eax, ebp
pop edi
pop ebp
ret
movzx eax, byte [ecx]
add ebp, eax
lea eax, [ebp - 0xfff1]
cmp ebp, 0xfff1
cmovae ebp, eax
mov eax, dword [esp + 0x2c]
add eax, ebp
lea edx, [eax - 0xfff1]
cmp eax, 0xfff1
cmovae eax, edx
add esp, 0x40
shl eax, 0x10
pop ebx
or eax, ebp
pop esi
pop edi
pop ebp
ret
mov eax, 1
jmp 0x408a5a
mov eax, dword [esp + 0x5c]
mov dword [esp + 0x34], eax
jmp 0x408bc8
mov eax, dword [esp + 0x5c]
sub eax, 0x15b1
jmp 0x408cf3