Function at 0x46983b
Capabilities:
Enumerate pe sections
Get file size
Read file on windows

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x74
mov eax, dword [0x49ab28]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, dword [ebp + 8]
push ebx
push esi
mov esi, dword [ebp + 0x18]
xor ebx, ebx
mov dword [ebp - 0x68], eax
mov eax, dword [ebp + 0x14]
push edi
mov edi, dword [ebp + 0xc]
mov dword [ebp - 0x6c], eax
mov dword [ebp - 0x70], ebx
cmp byte [0x4a12ec], bl
jne 0x4698ac
push str.Wow64DisableWow64FsRedirection
push str.Kernel32.dll
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.Wow64RevertWow64FsRedirection
push str.Kernel32.dll
mov dword [0x4a12e4], eax
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [0x4a12e8], eax
mov byte [0x4a12ec], 1
mov eax, dword [0x4a12e4]
cmp eax, ebx
je 0x4698bb
lea ecx, [ebp - 0x74]
push ecx
call eax
push ebx
push ebx
push 3
push ebx
push 3
push SysReAllocString
push dword [ebp - 0x68]
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov dword [ebp - 0x64], eax
mov eax, dword [0x4a12e8]
cmp eax, ebx
je 0x4698e1
push dword [ebp - 0x74]
call eax
cmp dword [ebp - 0x64], 0xffffffff
je 0x469a65
push ebx
push dword [ebp - 0x64]
call dword [sym.imp.KERNEL32.dll_GetFileSize]
or dword [esi], 1
push ebx
mov dword [esi + 4], eax
lea eax, [ebp - 0x60]
push eax
push dword [ebp + 0x10]
mov dword [ebp - 0x60], ebx
push edi
push dword [ebp - 0x64]
call dword [sym.imp.KERNEL32.dll_ReadFile]
test eax, eax
je 0x469a5c
mov eax, dword [ebp - 0x60]
cmp eax, 0x138
jb 0x469a5c
mov ecx, dword [edi + 0x3c]
lea edx, [edi + eax]
lea eax, [ecx + edi]
lea ebx, [eax + 0xf8]
mov dword [ebp - 0x68], edx
cmp ebx, edx
ja 0x469a5c
movzx edx, word [eax + 4]
mov ebx, 0x14c
cmp bx, dx
jne 0x469974
movzx edx, word [eax + 0x14]
add edx, ecx
lea ecx, [edx + edi + 0x18]
movzx edx, word [eax + 6]
imul edx, edx, 0x28
add edx, ecx
cmp edx, dword [ebp - 0x68]
ja 0x469a5c
xor edx, edx
cmp edx, dword [eax + 0x98]
jmp 0x4699a6
mov ebx, 0x8664
cmp bx, dx
jne 0x469a5c
movzx edx, word [eax + 0x14]
add edx, ecx
lea ecx, [edx + edi + 0x18]
movzx edx, word [eax + 6]
imul edx, edx, 0x28
add edx, ecx
cmp edx, dword [ebp - 0x68]
ja 0x469a5c
xor edx, edx
cmp edx, dword [eax + 0xa8]
mov ebx, dword [ebp - 0x6c]
sbb edx, edx
neg edx
mov dword [ebx], edx
movzx eax, word [eax + 6]
or ebx, 0xffffffff
test eax, eax
jbe 0x469a5c
add ecx, 0x14
cmp dword [ecx - 4], 0
je 0x4699d3
mov edx, dword [ecx]
test edx, edx
je 0x4699d3
cmp edx, ebx
jae 0x4699d3
mov ebx, edx
add ecx, 0x28
dec eax
jne 0x4699c1
cmp ebx, 0xffffffff
je 0x469a5c
cmp ebx, dword [ebp - 0x60]
jbe 0x4699e6
mov ebx, dword [ebp - 0x60]
push 0
push ebx
push edi
call fcn.0046bd20
or dword [esi], 2
mov dword [esi + 8], eax
lea eax, [ebp - 0x5c]
push eax
call fcn.0046b280
push dword [ebp - 0x60]
lea eax, [ebp - 0x5c]
push edi
push eax
call fcn.0046b9e0
mov ebx, dword [sym.imp.KERNEL32.dll_ReadFile]
add esp, 0x10
jmp 0x469a2c
cmp dword [ebp - 0x60], 0
je 0x469a43
push dword [ebp - 0x60]
lea eax, [ebp - 0x5c]
push edi
push eax
call fcn.0046b9e0
add esp, 0xc
and dword [ebp - 0x60], 0
push 0
lea eax, [ebp - 0x60]
push eax
push dword [ebp + 0x10]
push edi
push dword [ebp - 0x64]
call ebx
test eax, eax
jne 0x469a16
lea eax, [ebp - 0x5c]
push eax
lea eax, [esi + 0x10]
push eax
call fcn.0046ba80
or dword [esi], 8
pop ecx
pop ecx
mov dword [ebp - 0x70], 1
push dword [ebp - 0x64]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [ebp - 4]
mov eax, dword [ebp - 0x70]
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.0046c1d2
leave
ret