Function at 0x69035620
Capabilities:
Access peb ldr_data
Get kernel32 base address
Get process heap flags

Disassembly:
lea ecx, [esp + 4]
and esp, 0xfffffff0
push dword [ecx - 4]
push ebp
mov ebp, esp
push edi
push esi
push ebx
push ecx
sub esp, 0x218
mov eax, dword [ecx]
movss xmm4, dword [ecx + 0x14]
test byte [0x6907a0d8], 8
mov ebx, dword [ecx + 4]
mov dword [ebp - 0x1bc], eax
mov eax, dword [ecx + 8]
movss dword [ebp - 0x1c4], xmm4
mov edi, dword [ecx + 0x18]
mov dword [ebp - 0x1d0], eax
mov eax, dword [ecx + 0xc]
mov dword [ebp - 0x1c0], eax
mov eax, dword [ecx + 0x10]
mov dword [ebp - 0x1cc], eax
mov eax, dword [ecx + 0x1c]
mov dword [ebp - 0x1c8], eax
jne 0x690359b0
mov eax, dword [ebp - 0x1bc]
test eax, eax
je 0x69035996
test ebx, ebx
je 0x69035996
mov eax, dword [ebp - 0x1c0]
test eax, eax
je 0x69035996
movss xmm5, dword [ebp - 0x1c4]
ucomiss xmm5, dword [0x69080688]
jnp 0x69035990
test edi, edi
je 0x69035996
mov eax, dword [ebp - 0x1c8]
test eax, eax
je 0x69035996
lea eax, [ebp - 0x1ae]
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x1cc]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x1c0]
mov dword [esp], eax
call sym.gdiplus.dll_GdipGetEmHeight
sub esp, 0xc
test eax, eax
mov esi, eax
jne 0x6903599b
movss xmm0, dword [edi]
movzx eax, word [ebp - 0x1ae]
movss xmm1, dword [edi + 8]
movss dword [ebp - 0x190], xmm0
movss xmm0, dword [edi + 4]
movss xmm3, dword [ebp - 0x1c4]
movss dword [ebp - 0x18c], xmm0
pxor xmm0, xmm0
cvtsi2ss xmm0, eax
lea eax, [ebp - 0x1a4]
mulss xmm1, xmm0
mulss xmm0, dword [edi + 0xc]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x1bc]
divss xmm1, xmm3
mov dword [esp], eax
divss xmm0, xmm3
movss dword [ebp - 0x188], xmm1
movss dword [ebp - 0x184], xmm0
call sym.gdiplus.dll_GdipClonePath
sub esp, 8
test eax, eax
mov esi, eax
jne 0x6903599b
mov dword [esp], 0
call dword [sym.imp.gdi32.dll_CreateCompatibleDC]
mov dword [ebp - 0x1d8], eax
sub esp, 4
mov edx, eax
mov dword [esp], edx
lea eax, [ebp - 0x1a8]
mov dword [esp + 4], eax
call sym.gdiplus.dll_GdipCreateFromHDC
sub esp, 8
test eax, eax
mov esi, eax
jne 0x69035c21
lea eax, [ebp - 0x1ac]
pxor xmm0, xmm0
mov esi, 2
mov dword [esp + 0x10], eax
mov eax, dword [ebp - 0x1cc]
mov dword [esp + 0xc], esi
mov dword [esp + 8], eax
movzx eax, word [ebp - 0x1ae]
cvtsi2ss xmm0, eax
mov eax, dword [ebp - 0x1c0]
movss dword [esp + 4], xmm0
mov dword [esp], eax
call sym.gdiplus.dll_GdipCreateFont
sub esp, 0x14
test eax, eax
mov esi, eax
jne 0x69035c10
mov eax, dword [ebp - 0x1a8]
lea esi, [ebp - 0x144]
mov dword [esp + 8], esi
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x1ac]
mov dword [esp], eax
call sym._get_log_fontW
mov eax, dword [ebp - 0x1ac]
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeleteFont
mov eax, dword [ebp - 0x1a8]
sub esp, 4
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeleteGraphics
sub esp, 4
mov dword [esp], esi
call dword [sym.imp.gdi32.dll_CreateFontIndirectW]
sub esp, 4
test eax, eax
je 0x69035c78
mov dword [esp + 4], eax
mov esi, dword [ebp - 0x1d8]
mov dword [ebp - 0x1c0], eax
mov dword [esp], esi
call dword [sym.imp.gdi32.dll_SelectObject]
lea eax, [ebp - 0x180]
sub esp, 8
mov dword [esp], esi
mov dword [esp + 4], eax
call dword [sym.imp.gdi32.dll_GetTextMetricsW]
mov eax, dword [ebp - 0x1bc]
pxor xmm0, xmm0
movss xmm1, dword [ebp - 0x1c4]
mov dword [ebp - 0x19c], 0
mov dword [ebp - 0x1a0], eax
movzx eax, word [ebp - 0x1ae]
sub esp, 8
mov dword [esp + 4], ebx
mov ebx, esi
cvtsi2ss xmm0, eax
lea eax, [ebp - 0x1a0]
mov dword [esp + 0x20], eax
mov eax, sym._format_string_callback
mov dword [esp + 0x1c], eax
mov eax, 1
mov dword [esp + 0x18], eax
mov eax, dword [ebp - 0x1c8]
divss xmm1, xmm0
pxor xmm0, xmm0
cvtsi2ss xmm0, dword [ebp - 0x17c]
mov dword [esp], esi
mov dword [esp + 0x14], eax
lea eax, [ebp - 0x190]
mov dword [esp + 0x10], eax
mulss xmm0, xmm1
xor eax, eax
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x1d0]
movss dword [ebp - 0x198], xmm1
movss dword [ebp - 0x194], xmm0
mov dword [esp + 8], eax
call sym._gdip_format_string
mov dword [esp], ebx
mov esi, eax
call dword [sym.imp.gdi32.dll_DeleteDC]
mov edx, dword [ebp - 0x1c0]
sub esp, 4
mov dword [esp], edx
call dword [sym.imp.gdi32.dll_DeleteObject]
sub esp, 4
test esi, esi
jne 0x69035eaa
mov eax, dword [ebp - 0x1c8]
mov edx, dword [ebp - 0x1a4]
mov eax, dword [eax + 0x14]
mov dword [ebp - 0x1c0], edx
cmp eax, 1
je 0x69035cb2
cmp eax, 2
je 0x69035dba
mov eax, dword [ebp - 0x1c0]
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeletePath
sub esp, 4
jmp 0x6903599b
jne 0x690356bc
mov esi, 2
lea esp, [ebp - 0x10]
mov eax, esi
pop ecx
pop ebx
pop esi
pop edi
pop ebp
lea esp, [ecx - 4]
ret 0x20
test ebx, ebx
pxor xmm6, xmm6
cvtss2sd xmm6, xmm4
movsd qword [ebp - 0x1d8], xmm6
je 0x69035c00
mov eax, ebx
shr eax, 0x10
je 0x69035a98
mov dword [esp], ebx
mov ecx, 0xffffffff
mov dword [esp + 4], ecx
call dword [sym.imp.kernel32.dll_IsBadStringPtrW]
sub esp, 8
test eax, eax
jne 0x69035bf0
cmp word [ebx], 0
je 0x69035c50
lea esi, [esi]
mov edx, eax
cmp word [ebx + edx*2 + 2], 0
lea eax, [eax + 1]
jne 0x69035a00
mov dword [ebp - 0x1dc], ebx
mov ecx, 0x224c
mov esi, ebx
mov word [ebp - 0x144], cx
lea ecx, [ebp - 0x142]
jmp 0x69035a68
cmp eax, 9
je 0x69035b30
cmp eax, 0xa
jne 0x69035b4a
mov word [ecx], 0x6e5c
add ecx, 2
lea esi, [esi]
lea ebx, [ebp - 0x22]
lea eax, [edx - 1]
cmp ecx, ebx
ja 0x69035ba8
test edx, edx
jle 0x69035ba8
mov edx, eax
movzx eax, word [esi]
add esi, 2
cmp eax, 0xd
je 0x69035b20
jbe 0x69035a30
cmp eax, 0x22
je 0x69035b98
cmp eax, 0x5c
jne 0x69035b3d
mov word [ecx], 0x5c5c
add ecx, 2
jmp 0x69035a50
mov dword [esp], 0x6907fddb
movzx eax, bx
mov dword [esp + 4], eax
call sym._wine_dbg_sprintf.constprop.0_1
mov dword [esp + 0x14], eax
mov esi, dword [ebp - 0x1c8]
movsd xmm7, qword [ebp - 0x1d8]
mov dword [esp + 0x2c], edi
mov eax, dword [ebp - 0x1bc]
movsd qword [esp + 0x24], xmm7
mov dword [esp], 3
mov edx, dword [ebp - 0x1c0]
mov dword [esp + 0x30], esi
mov esi, dword [ebp - 0x1cc]
mov dword [esp + 0x10], eax
mov eax, str.__p___s___d___p___d___f___p___p__n
mov dword [esp + 0x1c], edx
mov edx, 0x6907a0d8
mov dword [esp + 0xc], eax
mov eax, str.GdipAddPathString
mov dword [esp + 0x20], esi
mov esi, dword [ebp - 0x1d0]
mov dword [esp + 8], eax
mov dword [esp + 4], edx
mov dword [esp + 0x18], esi
call sym._wine_dbg_log.constprop.0_5
jmp 0x69035683
mov word [ecx], 0x725c
add ecx, 2
jmp 0x69035a50
mov word [ecx], 0x745c
add ecx, 2
jmp 0x69035a50
lea ebx, [eax - 0x20]
cmp bx, 0x5e
jbe 0x69035be0
mov byte [ecx], 0x5c
mov ebx, eax
add ecx, 5
shr ebx, 0xc
movzx ebx, byte [ebx + 0x69080404]
mov byte [ecx - 4], bl
mov ebx, eax
shr ebx, 8
and ebx, 0xf
movzx ebx, byte [ebx + 0x69080404]
mov byte [ecx - 3], bl
mov ebx, eax
and eax, 0xf
shr ebx, 4
movzx eax, byte [eax + 0x69080404]
and ebx, 0xf
movzx ebx, byte [ebx + 0x69080404]
mov byte [ecx - 1], al
mov byte [ecx - 2], bl
jmp 0x69035a50
mov word [ecx], 0x225c
add ecx, 2
jmp 0x69035a50
mov byte [ecx], 0x22
test eax, eax
mov ebx, dword [ebp - 0x1dc]
jle 0x69035c69
mov word [ecx + 1], 0x2e2e
lea eax, [ecx + 4]
mov byte [ecx + 3], 0x2e
mov byte [eax], 0
lea eax, [ebp - 0x144]
mov dword [esp], eax
call sym.___wine_dbg_strdup
jmp 0x69035aab
mov byte [ecx], al
inc ecx
jmp 0x69035a50
mov eax, 0x6907ff5c
jmp 0x69035aab
mov eax, 0x6907ff55
jmp 0x69035aab
mov eax, dword [ebp - 0x1a8]
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeleteGraphics
sub esp, 4
mov eax, dword [ebp - 0x1d8]
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_DeleteDC]
mov eax, dword [ebp - 0x1a4]
sub esp, 4
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeletePath
sub esp, 4
jmp 0x6903599b
mov byte [ebp - 0x142], 0x22
lea ecx, [ebp - 0x142]
mov eax, 0x224c
mov word [ebp - 0x144], ax
lea eax, [ecx + 1]
jmp 0x69035bc6
test byte [0x6907a0d8], 4
jne 0x69035f38
mov eax, dword [ebp - 0x1d8]
mov esi, 1
mov dword [esp], eax
call dword [sym.imp.gdi32.dll_DeleteDC]
mov eax, dword [ebp - 0x1a4]
sub esp, 4
mov dword [esp], eax
call sym.gdiplus.dll_GdipDeletePath
sub esp, 4
jmp 0x6903599b
movss xmm0, dword [edi + 4]
movss xmm1, dword [ebp - 0x19c]
movss xmm2, dword [edi + 0xc]
movups xmm3, xmm0
addss xmm3, xmm1
comiss xmm2, xmm3
jbe 0x69035978
mov eax, dword [ebp - 0x1c0]
addss xmm2, xmm0
mov edi, dword [ebp - 0x1bc]
subss xmm2, xmm1
mov eax, dword [eax + 4]
mov ebx, dword [edi + 4]
mulss xmm2, dword [0x69080668]
cmp eax, ebx
jge 0x69035978
mov edx, eax
mov edi, dword [edi + 8]
not edx
lea ecx, [edx + ebx]
mov dword [ebp - 0x1c4], ecx
cmp ecx, 3
jbe 0x69035da0
mov dword [ebp - 0x1c8], eax
shr ecx, 2
lea edx, [edi + eax*8 + 4]
shl ecx, 5
movups xmm3, xmm2
add ecx, edx
mov dword [ebp - 0x1bc], ecx
shufps xmm3, xmm3, 0
mov eax, dword [ebp - 0x1bc]
mov ecx, edx
nop
movq xmm0, qword [edx]
movq xmm1, qword [edx + 0x10]
movhps xmm0, qword [edx + 8]
movhps xmm1, qword [edx + 0x18]
shufps xmm0, xmm1, 0x88
add edx, 0x20
add ecx, 0x20
addps xmm0, xmm3
movups xmm1, xmm0
movss dword [ecx - 0x20], xmm0
shufps xmm1, xmm0, 0x55
movss dword [ecx - 0x18], xmm1
movups xmm1, xmm0
unpckhps xmm1, xmm0
shufps xmm0, xmm0, 0xff
movss dword [ecx - 0x10], xmm1
movss dword [ecx - 8], xmm0
cmp edx, eax
jne 0x69035d40
mov edx, dword [ebp - 0x1c4]
mov eax, dword [ebp - 0x1c8]
and edx, 0xfffffffc
add eax, edx
lea esi, [esi]
nop
movss xmm0, dword [edi + eax*8 + 4]
addss xmm0, xmm2
movss dword [edi + eax*8 + 4], xmm0
inc eax
cmp eax, ebx
jl 0x69035da0
jmp 0x69035978
movss xmm2, dword [edi + 0xc]
mov eax, dword [ebp - 0x1c0]
addss xmm2, dword [edi + 4]
mov edi, dword [ebp - 0x1bc]
subss xmm2, dword [ebp - 0x19c]
mov eax, dword [eax + 4]
mov ebx, dword [edi + 4]
cmp eax, ebx
jge 0x69035978
mov edx, eax
mov edi, dword [edi + 8]
not edx
lea ecx, [edx + ebx]
mov dword [ebp - 0x1c4], ecx
cmp ecx, 3
jbe 0x69035e90
mov dword [ebp - 0x1c8], eax
shr ecx, 2
lea edx, [edi + eax*8 + 4]
shl ecx, 5
movups xmm3, xmm2
add ecx, edx
mov dword [ebp - 0x1bc], ecx
shufps xmm3, xmm3, 0
mov eax, dword [ebp - 0x1bc]
mov ecx, edx
lea esi, [esi]
lea esi, [esi]
movq xmm0, qword [edx]
movq xmm1, qword [edx + 0x10]
movhps xmm0, qword [edx + 8]
movhps xmm1, qword [edx + 0x18]
shufps xmm0, xmm1, 0x88
add edx, 0x20
add ecx, 0x20
addps xmm0, xmm3
movups xmm1, xmm0
movss dword [ecx - 0x20], xmm0
shufps xmm1, xmm0, 0x55
movss dword [ecx - 0x18], xmm1
movups xmm1, xmm0
unpckhps xmm1, xmm0
shufps xmm0, xmm0, 0xff
movss dword [ecx - 0x10], xmm1
movss dword [ecx - 8], xmm0
cmp edx, eax
jne 0x69035e30
mov edx, dword [ebp - 0x1c4]
mov eax, dword [ebp - 0x1c8]
and edx, 0xfffffffc
add eax, edx
lea esi, [esi]
nop
movss xmm0, dword [edi + eax*8 + 4]
addss xmm0, xmm2
movss dword [edi + eax*8 + 4], xmm0
inc eax
cmp ebx, eax
jg 0x69035e90
jmp 0x69035978
mov eax, dword [ebp - 0x1bc]
mov edi, dword fs:[0x18]
mov ebx, dword [sym.imp.kernel32.dll_HeapFree]
mov eax, dword [eax + 8]
mov dword [esp + 8], eax
xor eax, eax
mov dword [esp + 4], eax
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call ebx
mov eax, dword [ebp - 0x1bc]
mov eax, dword [eax + 0xc]
sub esp, 0xc
mov dword [esp + 8], eax
xor eax, eax
mov dword [esp + 4], eax
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call ebx
mov ecx, dword [ebp - 0x1a4]
xor eax, eax
mov edi, dword [ebp - 0x1bc]
sub esp, 0xc
mov edx, dword [ecx + eax]
mov dword [edi + eax], edx
add eax, 4
cmp eax, 0x18
jb 0x69035f07
mov dword [esp + 8], ecx
xor edi, edi
mov dword [esp + 4], edi
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call ebx
sub esp, 0xc
jmp 0x6903599b
mov edx, str.Failed_to_create_font_n
mov ecx, str.GdipAddPathString
mov dword [esp + 0xc], edx
mov ebx, 0x6907a0d8
mov dword [esp + 8], ecx
mov dword [esp + 4], ebx
mov dword [esp], 2
call sym._wine_dbg_log.constprop.0_5
jmp 0x69035c85