Function at 0x10004084
Capabilities:
Enumerate system firmware tables

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x78
push ebx
push esi
push edi
xor ebx, ebx
push ebx
push ebx
push 0x41435049
call dword [sym.imp.KERNEL32.dll_EnumSystemFirmwareTables]
mov dword [ebp - 0x10], eax
mov dword [ebp - 0x14], ebx
mov dword [ebp - 0xc], ebx
call fcn.100039a1
movsx edi, al
call fcn.100039a4
movsx ecx, al
imul edi, ecx
mov dword [ebp - 0x40], edi
call fcn.100039ad
movsx ecx, al
xor esi, esi
imul eax, edi, 9
mov dword [ebp - 8], ecx
add ecx, eax
imul eax, edi, 0xa
inc esi
mov dword [ebp - 0x68], ecx
mov dword [ebp - 0x48], esi
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x1c], eax
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004166
cmp dword [ebp - 0x10], ebx
jne 0x10004108
mov ecx, esi
mov dword [ebp - 0x30], ebx
jmp 0x1000411f
mov eax, dword [ebp - 0x20]
xorps xmm0, xmm0
movlpd qword [ebp - 0x64], xmm0
mov ecx, dword [ebp - 0x64]
mov dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x60]
mov dword [ebp - 0x30], eax
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 8]
movsx esi, byte [0x1000c003]
add eax, dword [ebp - 0x1c]
div esi
mov edx, dword [ebp - 0x30]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
jne 0x1000469a
xor esi, esi
inc esi
mov eax, dword [ebp - 0x20]
push dword [ebp - 0x10]
mov dword [ebp - 0x1c], eax
call dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_malloc]
mov dword [ebp - 0x14], eax
xor edx, edx
movsx eax, byte [0x1000c004]
add eax, dword [ebp - 8]
add eax, dword [ebp - 0x20]
pop ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x100041fc
cmp dword [ebp - 0x14], ebx
jne 0x100041a8
mov ecx, esi
mov dword [ebp - 0x30], ebx
jmp 0x100041b9
xorps xmm0, xmm0
movlpd qword [ebp - 0x64], xmm0
mov eax, dword [ebp - 0x60]
mov ecx, dword [ebp - 0x64]
mov dword [ebp - 0x30], eax
movsx eax, byte [0x1000c004]
xor edx, edx
movsx esi, byte [0x1000c003]
add eax, edi
add eax, dword [ebp - 8]
div esi
mov edx, dword [ebp - 0x30]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
jne 0x1000469a
push dword [ebp - 0x10]
push dword [ebp - 0x14]
push 0x41435049
call dword [sym.imp.KERNEL32.dll_EnumSystemFirmwareTables]
mov esi, dword [ebp - 8]
xor edx, edx
imul ecx, edi, 7
mov dword [ebp - 0x10], eax
movsx eax, byte [0x1000c004]
add ecx, esi
add eax, ecx
mov dword [ebp - 0x60], ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x1000429e
cmp dword [ebp - 0x10], ebx
jne 0x10004247
xor ecx, ecx
mov dword [ebp - 0x30], ebx
inc ecx
jmp 0x10004258
xorps xmm0, xmm0
movlpd qword [ebp - 0x5c], xmm0
mov eax, dword [ebp - 0x58]
mov ecx, dword [ebp - 0x5c]
mov dword [ebp - 0x30], eax
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, esi
movsx esi, byte [0x1000c003]
lea eax, [eax + edi*2]
div esi
mov edx, dword [ebp - 0x30]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
jne 0x1000469a
mov esi, dword [ebp - 8]
movsx eax, byte [0x1000c004]
lea ecx, [esi + edi*8]
add eax, ecx
mov dword [ebp - 0x50], ecx
movsx ecx, byte [0x1000c003]
xor edx, edx
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
mov byte [ebp - 0x18], bl
push ecx
push ecx
mov dword [ebp - 0x30], ebx
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
mov dword [ebp - 0x2c], ebx
addsd xmm0, qword [eax*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
test eax, eax
jle 0x10004548
mov ecx, dword [ebp - 0x10]
shr ecx, 2
mov dword [ebp - 0x58], ecx
test ecx, ecx
je 0x100044f7
mov edx, dword [ebp - 0x14]
imul eax, edi, 3
add edx, 0x10
mov dword [ebp - 0x28], edx
add eax, esi
mov dword [ebp - 0x4c], eax
lea eax, [esi + edi*4]
mov dword [ebp - 0x54], eax
imul eax, edi, 5
add eax, esi
mov esi, ecx
add dword [ebp - 0x30], esi
mov dword [ebp - 0x34], eax
mov dword [ebp - 0x44], esi
xor eax, eax
lea edi, [ebp - 0x70]
stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov eax, dword [edx - 6]
mov dword [ebp - 0x70], eax
mov ax, word [edx - 2]
xor edx, edx
mov word [ebp - 0x6c], ax
movsx eax, byte [0x1000c004]
add eax, dword [ebp - 0x4c]
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x100043c2
lea eax, [ebp - 0x70]
cmp dword [eax], 0x54454157
jne 0x10004375
xor ecx, ecx
mov edi, ebx
inc ecx
jmp 0x10004383
xorps xmm0, xmm0
movlpd qword [ebp - 0x3c], xmm0
mov edi, dword [ebp - 0x38]
mov ecx, dword [ebp - 0x3c]
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 0x50]
movsx esi, byte [0x1000c003]
div esi
mov edx, edi
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x100043c2
inc dword [ebp - 0xc]
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 0x54]
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004452
cmp byte [ebp - 0x18], bl
jne 0x100043f9
lea eax, [ebp - 0x70]
cmp dword [eax], 0x54455048
jne 0x100043f9
xor ecx, ecx
mov edi, ebx
inc ecx
jmp 0x10004407
xorps xmm0, xmm0
movlpd qword [ebp - 0x3c], xmm0
mov edi, dword [ebp - 0x38]
mov ecx, dword [ebp - 0x3c]
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 0x34]
movsx esi, byte [0x1000c003]
div esi
mov edx, edi
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
mov ecx, dword [ebp - 0x18]
imul eax, esi
push 1
movzx ecx, cl
pop esi
test eax, eax
cmovne ecx, esi
mov dword [ebp - 0x18], ecx
jmp 0x10004455
xor esi, esi
inc esi
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 0x34]
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x100044e0
mov eax, dword [ebp - 0x28]
mov eax, dword [eax]
or eax, ebx
jne 0x10004485
mov ecx, esi
mov dword [ebp - 0x38], ebx
jmp 0x10004496
xorps xmm0, xmm0
movlpd qword [ebp - 0x78], xmm0
mov eax, dword [ebp - 0x74]
mov ecx, dword [ebp - 0x78]
mov dword [ebp - 0x38], eax
mov edi, dword [ebp - 0x40]
xor edx, edx
movsx eax, byte [0x1000c004]
imul esi, edi, 6
add esi, dword [ebp - 8]
add eax, esi
movsx esi, byte [0x1000c003]
div esi
mov edx, dword [ebp - 0x38]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x100044e3
inc dword [ebp - 0xc]
jmp 0x100044e3
mov edi, dword [ebp - 0x40]
mov edx, dword [ebp - 0x28]
inc edx
sub dword [ebp - 0x44], 1
mov dword [ebp - 0x28], edx
jne 0x1000432c
mov esi, dword [ebp - 8]
movsx eax, byte [0x1000c004]
lea ecx, [esi + edi*8]
add eax, ecx
inc dword [ebp - 0x2c]
movsx ecx, byte [0x1000c003]
xor edx, edx
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
push ecx
push ecx
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
addsd xmm0, qword [eax*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
mov ecx, dword [ebp - 0x58]
cmp dword [ebp - 0x2c], eax
jl 0x100042fd
movsx eax, byte [0x1000c004]
xor edx, edx
imul ecx, edi, 6
add ecx, esi
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x100045ce
cmp dword [ebp - 0x30], 8
jge 0x1000457a
xor ecx, ecx
mov dword [ebp - 0x44], ebx
inc ecx
jmp 0x1000458b
xorps xmm0, xmm0
movlpd qword [ebp - 0x78], xmm0
mov eax, dword [ebp - 0x74]
mov ecx, dword [ebp - 0x78]
mov dword [ebp - 0x44], eax
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, dword [ebp - 0x60]
movsx esi, byte [0x1000c003]
div esi
mov edx, dword [ebp - 0x44]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
mov esi, dword [ebp - 8]
test eax, eax
je 0x100045ce
inc dword [ebp - 0xc]
movsx eax, byte [0x1000c004]
xor edx, edx
imul ecx, edi, 3
add ecx, esi
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004655
cmp byte [ebp - 0x18], bl
jne 0x100045ff
xor ecx, ecx
mov dword [ebp - 0x44], ebx
inc ecx
jmp 0x10004610
xorps xmm0, xmm0
movlpd qword [ebp - 0x78], xmm0
mov eax, dword [ebp - 0x74]
mov ecx, dword [ebp - 0x78]
mov dword [ebp - 0x44], eax
movsx eax, byte [0x1000c004]
xor edx, edx
add eax, esi
movsx esi, byte [0x1000c003]
lea eax, [eax + edi*8]
div esi
mov edx, dword [ebp - 0x44]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
mov esi, dword [ebp - 8]
test eax, eax
je 0x10004655
inc dword [ebp - 0xc]
movsx eax, byte [0x1000c004]
xor edx, edx
movsx ecx, byte [0x1000c003]
add eax, esi
push ecx
push ecx
xorps xmm0, xmm0
lea eax, [eax + edi*4]
movsd qword [esp], xmm0
div ecx
mov esi, eax
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x1000469a
mov ecx, dword [ebp - 0x68]
xor esi, esi
inc esi
jmp 0x100040dd
call fcn.100039a4
movsx ecx, al
call fcn.100039a1
movsx eax, al
imul ecx, eax
imul edx, ecx, 0xa
call fcn.100039ad
movsx ecx, al
movsx eax, byte [0x1000c004]
add ecx, edx
add eax, ecx
xor edx, edx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x1000476b
cmp dword [ebp - 0x14], ebx
je 0x100046ee
mov dword [ebp - 0x40], 1
mov dword [ebp - 0x44], ebx
jmp 0x10004702
xorps xmm0, xmm0
movlpd qword [ebp - 0x78], xmm0
mov eax, dword [ebp - 0x74]
mov dword [ebp - 0x44], eax
mov eax, dword [ebp - 0x78]
mov dword [ebp - 0x40], eax
call fcn.100039a4
movsx ecx, al
call fcn.100039a1
movsx eax, al
imul ecx, eax
imul edi, ecx, 5
call fcn.100039ad
movsx esi, byte [0x1000c004]
xor edx, edx
movsx eax, al
add eax, edi
mov ecx, dword [ebp - 0x40]
add eax, esi
movsx esi, byte [0x1000c003]
div esi
mov edx, dword [ebp - 0x44]
mov esi, eax
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x1000476b
push dword [ebp - 0x14]
call dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_free]
pop ecx
push 0x28
push 0xf
call fcn.10004dcb
pop ecx
pop ecx
mov dword [ebp - 0x30], eax
call fcn.100039a4
movsx edx, al
call fcn.100039a1
movsx ecx, al
imul edx, ecx
call fcn.100039ad
movsx ecx, byte [0x1000c004]
movsx eax, al
add eax, edx
xor edx, edx
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004afa
cmp dword [ebp - 0xc], ebx
je 0x100047cf
xorps xmm0, xmm0
movlpd qword [ebp - 0x78], xmm0
mov eax, dword [ebp - 0x78]
mov ebx, dword [ebp - 0x74]
mov dword [ebp - 0x48], eax
call fcn.100039a4
movsx ecx, al
call fcn.100039a1
movsx eax, al
imul ecx, eax
imul ecx, ecx, 6
call fcn.100039ad
movsx eax, al
xor edx, edx
add ecx, eax
movsx eax, byte [0x1000c004]
movsx esi, byte [0x1000c003]
add eax, ecx
div esi
mov dword [ebp - 0x68], ecx
mov esi, eax
call fcn.100039a4
mov byte [ebp - 2], al
call fcn.100039a1
mov byte [ebp - 1], al
call fcn.100039ad
mov ecx, dword [ebp - 0x48]
mov edx, ebx
mov byte [ebp - 3], al
call fcn.10006df0
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x100048bc
lea eax, [ebp - 0x30]
push eax
lea ecx, [ebp - 0x24]
call fcn.10001081
push eax
call fcn.10001bd9
movsx eax, byte [ebp - 2]
xor edx, edx
movsx ecx, byte [ebp - 1]
imul ecx, eax
imul eax, ecx, 7
movsx ecx, byte [0x1000c004]
add eax, ecx
movsx ecx, byte [ebp - 3]
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
push ecx
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
addsd xmm0, qword [eax*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
test eax, eax
jle 0x10004afa
mov eax, dword [ebp - 0x30]
jmp 0x10004afa
movsx eax, byte [ebp - 2]
xor edx, edx
movsx ecx, byte [ebp - 1]
imul ecx, eax
imul eax, ecx, 5
movsx ecx, byte [0x1000c004]
add eax, ecx
movsx ecx, byte [ebp - 3]
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004afa
call fcn.100039a7
movsx ecx, al
movsx eax, byte [0x1000c115]
imul ecx, eax
imul edi, ecx, 0xa
call fcn.100039b0
movsx eax, al
sub edi, eax
call fcn.100039aa
movsx eax, al
xor edx, edx
add edi, eax
movsx eax, byte [0x1000c004]
add eax, dword [ebp - 0x68]
movsx ecx, byte [0x1000c003]
div ecx
mov esi, eax
call fcn.100039a4
mov bl, al
call fcn.100039a1
mov bh, al
call fcn.100039ad
movsx ecx, byte [0x1000c001]
add ecx, edi
mov byte [ebp - 3], al
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
shr ecx, 0x1f
push ecx
push ecx
addsd xmm0, qword [ecx*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x10004a92
movsd xmm0, qword [0x10008b80]
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx eax, bl
xor edx, edx
movsx ecx, bh
imul ecx, eax
imul eax, ecx, 9
movsx ecx, byte [0x1000c004]
add eax, ecx
movsx ecx, byte [ebp - 3]
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
je 0x10004afa
call fcn.100039a4
movsx ecx, al
call fcn.100039a1
movsx eax, al
imul ecx, eax
call fcn.100039ad
movsx eax, al
xor edx, edx
lea eax, [eax + ecx*8]
movsx ecx, byte [0x1000c004]
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
mov edi, eax
call fcn.100039a4
movsx edx, al
call fcn.100039a1
movsx ecx, al
imul edx, ecx
call fcn.100039ad
movsx ecx, al
lea eax, [ecx + edx*4]
movsx ecx, byte [0x1000c004]
add eax, ecx
xor edx, edx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub edi, ecx
mov esi, eax
push ecx
push ecx
movd xmm0, edi
cvtdq2pd xmm0, xmm0
shr edi, 0x1f
addsd xmm0, qword [edi*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
movsx ecx, byte [section..data]
sub esi, ecx
imul eax, esi
test eax, eax
je 0x10004afa
movsd xmm0, qword [0x10008b68]
push ecx
push ecx
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
jmp 0x10004afa
lea eax, [ebp - 0x30]
push eax
lea ecx, [ebp - 0x20]
call fcn.10001071
push eax
call fcn.10001bbd
movsx eax, bl
xor edx, edx
movsx ecx, bh
imul ecx, eax
imul eax, ecx, 7
movsx ecx, byte [0x1000c004]
add eax, ecx
movsx ecx, byte [ebp - 3]
add eax, ecx
movsx ecx, byte [0x1000c003]
div ecx
movsx ecx, byte [section..data]
sub eax, ecx
push ecx
movd xmm0, eax
cvtdq2pd xmm0, xmm0
shr eax, 0x1f
addsd xmm0, qword [eax*8 + 0x10008ba0]
movsd qword [esp], xmm0
call fcn.10004e73
pop ecx
pop ecx
test eax, eax
jle 0x10004afa
xor eax, eax
pop edi
pop esi
pop ebx
leave
ret