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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0xe8
push esi
push edi
mov edi, dword [ebp + 0xc]
mov esi, ecx
test edi, edi
je 0x46fefd
mov dword [edi], 0xffffffff
cmp word [esi], 0
jne 0x46ff73
cmp word [edx], 0
jne 0x46ff73
mov eax, dword [0x4eafb4]
test eax, eax
jne 0x46ff61
mov ecx, dword [0x4eafb0]
test ecx, ecx
jne 0x46ff3e
push 0x4b00
call fcn.0049f88a
mov ecx, eax
add esp, 4
mov dword [0x4eafb0], ecx
test ecx, ecx
je 0x4704a4
mov eax, dword [0x4eafb4]
lea esi, [eax + eax*2]
shl esi, 5
push 0x11
add esi, ecx
call dword [sym.imp.GDI32.dll_GetStockObject]
push esi
push 0x5c
push eax
mov dword [esi + 0x5c], eax
call dword [sym.imp.GDI32.dll_GetObjectW]
inc dword [0x4eafb4]
test edi, edi
je 0x46ff6b
mov dword [edi], 0xff000000
xor eax, eax
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov edi, dword [ebp + 8]
test edi, edi
jne 0x46ff8f
cmp dword [0x4eafb4], edi
jle 0x4703e8
mov edi, dword [0x4eafb0]
mov dword [ebp + 8], edi
cmp word [edx], 0
movups xmm0, xmmword [edi]
movups xmmword [esp + 0x30], xmm0
movups xmm0, xmmword [edi + 0x10]
movups xmmword [esp + 0x40], xmm0
movups xmm0, xmmword [edi + 0x20]
movups xmmword [esp + 0x50], xmm0
movups xmm0, xmmword [edi + 0x30]
movups xmmword [esp + 0x60], xmm0
movups xmm0, xmmword [edi + 0x40]
movups xmmword [esp + 0x70], xmm0
movups xmm0, xmmword [edi + 0x50]
movups xmmword [esp + 0x80], xmm0
je 0x46ffe7
push 0x1f
push edx
lea eax, [esp + 0x54]
push eax
call fcn.004ab924
add esp, 0xc
xor eax, eax
mov word [esp + 0x8a], ax
or edx, 0xffffffff
mov dword [esp + 0x14], 0
cmp word [esi], 0
mov dword [esp + 0xc], edx
je 0x470291
mov dword [esp + 0x10], esi
test esi, esi
je 0x470048
movzx eax, word [esi]
test ax, ax
je 0x470048
mov edi, eax
mov ecx, 0x4d4b64
mov edx, 0x20
nop dword [eax]
cmp di, dx
je 0x47008d
movzx eax, word [ecx + 2]
add ecx, 2
mov edx, eax
test ax, ax
jne 0x470020
mov eax, dword [esp + 0x10]
add eax, 2
mov dword [esp + 0x10], eax
movzx eax, word [eax]
mov edi, eax
test ax, ax
jne 0x470012
mov ecx, esi
lea edx, [ecx + 2]
nop dword [eax]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x470050
sub ecx, edx
sar ecx, 1
lea edi, [esi + ecx*2]
movzx eax, word [edi]
mov dword [esp + 0x2c], eax
xor eax, eax
push str.Bold
push esi
mov word [edi], ax
call fcn.0049f76e
add esp, 8
test eax, eax
jne 0x470093
mov dword [esp + 0x40], 0x2bc
jmp 0x47025f
mov edi, dword [esp + 0x10]
jmp 0x470062
push str.italic
push esi
call fcn.0049f76e
add esp, 8
test eax, eax
jne 0x4700af
mov byte [esp + 0x44], 1
jmp 0x47025f
push str.norm
push esi
call fcn.0049f76e
add esp, 8
test eax, eax
jne 0x4700d7
mov word [esp + 0x44], ax
mov byte [esp + 0x46], al
mov dword [esp + 0x40], 0x190
jmp 0x47025f
push str.underline
push esi
call fcn.0049f76e
add esp, 8
test eax, eax
jne 0x4700f3
mov byte [esp + 0x45], 1
jmp 0x47025f
push str.strike
push esi
call fcn.0049f76e
add esp, 8
test eax, eax
jne 0x47010f
mov byte [esp + 0x46], 1
jmp 0x47025f
movzx eax, word [esi]
mov ecx, eax
mov dword [esp + 0x24], eax
mov dword [esp + 0x18], ecx
movzx ecx, ax
test ecx, 0xffffff80
je 0x470131
mov dword [esp + 0x10], 0
jmp 0x470142
push ecx
call fcn.004a5790
mov dword [esp + 0x14], eax
add esp, 4
mov eax, dword [esp + 0x24]
and eax, 0xffdf
cmp dword [esp + 0x10], 0
movzx edx, ax
mov eax, dword [esp + 0x18]
movzx ecx, ax
lea eax, [esi + 2]
cmove edx, ecx
mov dword [esp + 0x10], eax
cmp word [eax], 0
movzx ecx, dx
mov dword [esp + 0x18], ecx
je case.0x4701af.68
push ecx
push 0x4de6a4
call fcn.0049d2e2
add esp, 8
test eax, eax
je 0x470199
push ecx
push 1
push 0
xor edx, edx
lea ecx, [esi + 2]
call fcn.00481e90
add esp, 0xc
test eax, eax
je case.0x4701af.68
mov eax, dword [esp + 0x18]
movzx eax, ax
add eax, 0xffffffbd
cmp eax, 0x14
ja case.0x4701af.68
movzx eax, byte [eax + 0x4704c8]
jmp dword [eax*4 + 0x4704b4]
lea ecx, [esi + 2]
call fcn.004836d0
mov edx, eax
mov dword [esp + 0xc], edx
cmp edx, 0xffffffff
jne 0x470263
push 0x10
lea eax, [esp + 0x2c]
push eax
lea eax, [esi + 2]
push eax
call fcn.004a1697
movzx edx, al
add esp, 0xc
movzx ecx, ax
shl edx, 8
shr ecx, 8
or edx, ecx
shr eax, 0x10
shl edx, 8
movzx eax, al
or edx, eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0xc], edx
cmp word [eax], 0
je 0x47025f
push 0
mov edx, esi
mov ecx, str.Invalid_option.
call fcn.00430e80
add esp, 4
or eax, 0xffffffff
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov ecx, dword [esp + 0x10]
call fcn.004828e0
mov dword [esp + 0x40], eax
jmp 0x47025f
push dword [esp + 0x10]
call fcn.004a9c9f
fadd qword [0x4dfac0]
add esp, 4
fstp qword [esp + 0x18]
cvttsd2si eax, qword [esp + 0x18]
mov dword [esp + 0x14], eax
jmp 0x47025f
mov ecx, dword [esp + 0x10]
call fcn.004828e0
mov byte [esp + 0x4a], al
mov edx, dword [esp + 0xc]
mov eax, dword [esp + 0x2c]
mov esi, edi
mov word [edi], ax
movzx eax, ax
nop
cmp ax, 0x20
je 0x47027c
cmp ax, 9
jne 0x470285
movzx eax, word [esi + 2]
add esi, 2
jmp 0x470270
test ax, ax
jne 0x470000
mov edi, dword [ebp + 8]
mov eax, dword [ebp + 0xc]
test eax, eax
je 0x47029a
mov dword [eax], edx
push 0
call dword [sym.imp.USER32.dll_GetDC]
mov esi, eax
push 0x5a
push esi
call dword [sym.imp.GDI32.dll_GetDeviceCaps]
mov ecx, dword [esp + 0x14]
test ecx, ecx
je 0x4702c5
push 0x48
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_MulDiv]
neg eax
mov dword [esp + 0x30], eax
push 0x1f
lea eax, [esp + 0x50]
mov byte [esp + 0xab], 1
push eax
lea eax, [esp + 0xb4]
mov byte [esp + 0xb3], 0
push eax
call fcn.004ab924
add esp, 0xc
xor eax, eax
mov word [esp + 0xea], ax
mov byte [esp + 0xb], al
push eax
lea eax, [esp + 0xf]
push eax
push 0x483890
lea eax, [esp + 0x9c]
push eax
push esi
call dword [sym.imp.GDI32.dll_EnumFontFamiliesExW]
cmp byte [esp + 0xb], 0
jne 0x470334
lea ecx, [edi + 0x1c]
lea edx, [esp + 0x4c]
sub edx, ecx
movzx eax, word [ecx]
lea ecx, [ecx + 2]
mov word [ecx + edx - 2], ax
test ax, ax
jne 0x470324
push esi
push 0
call dword [sym.imp.USER32.dll_ReleaseDC]
mov eax, dword [0x4eafb4]
xor edi, edi
test eax, eax
jle 0x4703cd
mov ecx, dword [0x4eafb0]
xor esi, esi
lea eax, [esp + 0x4c]
push eax
lea eax, [ecx + 0x1c]
add eax, esi
push eax
call fcn.0049f76e
mov ecx, dword [0x4eafb0]
add esp, 8
test eax, eax
jne 0x4703ac
mov eax, dword [esi + ecx]
cmp eax, dword [esp + 0x30]
jne 0x4703ac
mov eax, dword [esi + ecx + 0x10]
cmp eax, dword [esp + 0x40]
jne 0x4703ac
mov al, byte [esi + ecx + 0x14]
cmp al, byte [esp + 0x44]
jne 0x4703ac
mov al, byte [esi + ecx + 0x15]
cmp al, byte [esp + 0x45]
jne 0x4703ac
mov al, byte [esi + ecx + 0x16]
cmp al, byte [esp + 0x46]
jne 0x4703ac
mov al, byte [esi + ecx + 0x1a]
cmp al, byte [esp + 0x4a]
je 0x4703bb
mov eax, dword [0x4eafb4]
inc edi
add esi, 0x60
cmp edi, eax
jl 0x470354
jmp 0x4703cd
cmp edi, 0xffffffff
je 0x4703c8
mov eax, edi
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov eax, dword [0x4eafb4]
cmp eax, 0xc8
jl 0x4703f1
push 0x4d1e48
push str.Too_many_fonts.
mov ecx, 0x4eb110
call fcn.00430790
or eax, 0xffffffff
pop edi
pop esi
mov esp, ebp
pop ebp
ret
lea eax, [esp + 0x30]
mov dword [esp + 0x34], 0
push eax
mov dword [esp + 0x3c], 0
mov dword [esp + 0x40], 0
mov word [esp + 0x4b], 0x401
mov byte [esp + 0x4d], 0
mov byte [esp + 0x4f], 0
call dword [sym.imp.GDI32.dll_CreateFontIndirectW]
mov dword [esp + 0x8c], eax
test eax, eax
jne 0x47044d
push 0x4d1e48
push str.Cant_create_font.
mov ecx, 0x4eb110
call fcn.00430790
or eax, 0xffffffff
pop edi
pop esi
mov esp, ebp
pop ebp
ret
mov ecx, dword [0x4eafb4]
movups xmm0, xmmword [esp + 0x30]
pop edi
pop esi
lea eax, [ecx + ecx*2]
shl eax, 5
add eax, dword [0x4eafb0]
inc ecx
mov dword [0x4eafb4], ecx
movups xmmword [eax], xmm0
movups xmm0, xmmword [esp + 0x38]
movups xmmword [eax + 0x10], xmm0
movups xmm0, xmmword [esp + 0x48]
movups xmmword [eax + 0x20], xmm0
movups xmm0, xmmword [esp + 0x58]
movups xmmword [eax + 0x30], xmm0
movups xmm0, xmmword [esp + 0x68]
movups xmmword [eax + 0x40], xmm0
movups xmm0, xmmword [esp + 0x78]
movups xmmword [eax + 0x50], xmm0
lea eax, [ecx - 1]
mov esp, ebp
pop ebp
ret
push 0x4d1e48
push str.Out_of_memory.
call fcn.00430cc0
nop
mov dh, 1
inc edi
add byte [edx + 2], dl
inc edi
add byte [eax], dh
add al, byte [edi]
and dword [edx], eax
inc edi
add byte [edi], al
add al, byte [edi]
add byte [esp + eax], al
add al, 4
add al, 4
add al, 4
add al, 4
add al, 4
add al, 1
add al, 2
add al, 4
add al, 3
int3