Function at 0x64a6e8b0
Capabilities:
Access peb ldr_data
Get process heap flags

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0xcc
mov dword [ebp - 0x94], eax
mov ebx, dword [ebp + 0x14]
mov dword [ebp - 0x88], edx
mov dword [ebp - 0x70], ecx
test ecx, ecx
jle 0x64a6f15c
mov eax, ebx
and eax, 1
cmp eax, 1
sbb eax, eax
and eax, 0x80
add eax, 6
mov dword [ebp - 0x80], eax
mov eax, ebx
and eax, 0xfffffffa
jne 0x64a6e9f9
mov eax, dword [ebp - 0x70]
mov dword [esp + 4], 8
mov edi, dword fs:[0x18]
lea esi, [eax*8]
mov dword [esp + 8], esi
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [sym.imp.kernel32.dll_HeapAlloc]
mov dword [ebp - 0x98], eax
call eax
mov dword [ebp - 0x90], eax
sub esp, 0xc
test eax, eax
je 0x64a6f21d
and ebx, 4
mov dword [ebp - 0x8c], ebx
jne 0x64a6ea33
mov dword [esp + 8], esi
mov dword [esp + 4], 8
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0x98]
call eax
sub esp, 0xc
mov ebx, eax
test eax, eax
je 0x64a6f227
mov dword [esp + 8], esi
mov eax, dword [ebp + 0x10]
lea esi, [ebp - 0x30]
mov dword [esp], ebx
mov dword [esp + 4], eax
call sym._memcpy
mov dword [ebp - 0x84], esi
mov dword [esp + 0xc], esi
mov dword [esp + 8], 0
mov dword [esp + 4], 4
mov eax, dword [ebp - 0x94]
mov dword [esp], eax
call sym._get_graphics_transform
test eax, eax
je 0x64a6f0d9
mov ecx, dword [ebp - 0x70]
mov eax, dword [ebp - 0x90]
mov edx, ebx
call sym._round_points
mov dword [esp + 8], ebx
mov dword [esp + 4], 0
mov eax, dword fs:[0x18]
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [sym.imp.kernel32.dll_HeapFree]
mov dword [ebp - 0xa0], eax
call eax
sub esp, 0xc
jmp 0x64a6eb20
test byte [0x64ab50b0], 1
je 0x64a6e8f6
mov dword [esp + 0x10], eax
mov dword [esp + 0xc], str.Ignoring_flags__x_n
mov dword [esp + 8], str.SOFTWARE_GdipDrawDriverString
mov dword [esp + 4], 0x64ab50b0
mov dword [esp], 0
call sym._wine_dbg_log.constprop.1_3
jmp 0x64a6e8f6
mov eax, dword [ebp + 0x10]
lea esi, [ebp - 0x30]
mov dword [ebp - 0x84], esi
mov edx, dword [eax + 4]
mov eax, dword [eax]
mov dword [ebp - 0x44], edx
mov dword [ebp - 0x48], eax
mov dword [esp + 0xc], esi
mov dword [esp + 8], 0
mov dword [esp + 4], 4
mov eax, dword [ebp - 0x94]
mov dword [esp], eax
call sym._get_graphics_transform
test eax, eax
je 0x64a6f0ba
fld dword [ebp - 0x48]
mov ebx, dword [sym.imp.ucrtbase.dll__fdclass]
fstp dword [esp]
call ebx
mov edx, eax
xor eax, eax
cmp dx, 2
je 0x64a6eac5
fnstcw word [ebp - 0x5a]
fld dword [0x64ababb4]
fadd dword [ebp - 0x48]
movzx eax, word [ebp - 0x5a]
and ah, 0xf3
or ah, 4
mov word [ebp - 0x5c], ax
movzx eax, word [ebp - 0x5a]
fldcw word [ebp - 0x5c]
frndint
fldcw word [ebp - 0x5a]
or ah, 0xc
mov word [ebp - 0x5e], ax
fldcw word [ebp - 0x5e]
fistp dword [ebp - 0x64]
fldcw word [ebp - 0x5a]
mov eax, dword [ebp - 0x64]
mov esi, dword [ebp - 0x90]
mov dword [esi], eax
fld dword [ebp - 0x44]
fstp dword [esp]
call ebx
cmp ax, 2
je 0x64a6f0f4
fnstcw word [ebp - 0x5a]
fld dword [0x64ababb4]
fadd dword [ebp - 0x44]
movzx eax, word [ebp - 0x5a]
and ah, 0xf3
or ah, 4
mov word [ebp - 0x5c], ax
movzx eax, word [ebp - 0x5a]
fldcw word [ebp - 0x5c]
frndint
fldcw word [ebp - 0x5a]
or ah, 0xc
mov word [ebp - 0x5e], ax
mov eax, dword [sym.imp.kernel32.dll_HeapFree]
fldcw word [ebp - 0x5e]
fistp dword [esi + 4]
fldcw word [ebp - 0x5a]
mov dword [ebp - 0xa0], eax
mov eax, dword [ebp + 0x18]
mov dword [esp], 0
lea ecx, [ebp - 0x4c]
xor edi, edi
mov ebx, 0x80000000
mov dword [esp + 4], eax
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x94]
call sym._get_font_hfont.isra.0
mov dword [esp], 0
call sym._CreateCompatibleDC_4
mov esi, dword [ebp - 0x4c]
sub esp, 4
mov dword [ebp - 0x7c], eax
mov dword [ebp - 0xa8], esi
mov dword [esp + 4], esi
mov dword [esp], eax
call sym._SelectObject_8
mov dword [ebp - 0x78], 0x80000000
mov esi, dword [ebp - 0x90]
mov dword [ebp - 0x6c], 0x7fffffff
sub esp, 8
mov dword [ebp - 0x68], 0x7fffffff
mov dword [ebp - 0x64], 0
mov dword [ebp - 0x74], ebx
lea esi, [esi]
mov dword [esp + 0x18], 0x64ab9ed0
mov dword [esp + 0x14], 0
mov dword [esp + 0x10], 0
mov eax, dword [ebp - 0x84]
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x80]
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x88]
movzx eax, word [eax + edi*2]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x7c]
mov dword [esp], eax
call sym._GetGlyphOutlineW_28
sub esp, 0x1c
mov ecx, eax
cmp eax, 0xffffffff
je 0x64a6f053
mov eax, dword [ebp - 0x64]
cmp eax, ecx
jb 0x64a6ebf5
test ecx, ecx
je 0x64a6ec35
mov ecx, eax
mov ebx, dword [ebp - 0x68]
mov edx, dword [ebp - 0x28]
mov dword [ebp - 0x64], ecx
add edx, dword [esi]
mov eax, dword [esi + 4]
sub eax, dword [ebp - 0x24]
cmp ebx, edx
cmovg ebx, edx
mov dword [ebp - 0x68], ebx
mov ebx, dword [ebp - 0x6c]
cmp ebx, eax
cmovg ebx, eax
add edx, dword [ebp - 0x30]
mov dword [ebp - 0x6c], ebx
mov ebx, dword [ebp - 0x74]
cmp ebx, edx
cmovge edx, ebx
mov ebx, dword [ebp - 0x78]
add eax, dword [ebp - 0x2c]
cmp ebx, eax
mov dword [ebp - 0x74], edx
cmovge eax, ebx
mov dword [ebp - 0x78], eax
mov eax, dword [ebp - 0x8c]
add edi, 1
test eax, eax
je 0x64a6ec68
cmp dword [ebp - 0x70], edi
jle 0x64a6ec68
movsx eax, word [ebp - 0x20]
add eax, dword [esi]
add esi, 8
mov dword [esi], eax
movsx eax, word [ebp - 0x1e]
add eax, dword [esi - 4]
mov dword [esi + 4], eax
jmp 0x64a6eb98
add esi, 8
cmp dword [ebp - 0x70], edi
jne 0x64a6eb98
mov eax, dword [ebp - 0x64]
mov ebx, dword [ebp - 0x74]
test eax, eax
je 0x64a6f111
mov eax, dword [ebp - 0x64]
mov dword [esp + 4], 8
mov esi, ebx
mov edi, dword fs:[0x18]
mov dword [esp + 8], eax
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0x98]
call eax
mov ecx, dword [ebp - 0x68]
mov ebx, dword [ebp - 0x78]
sub esp, 0xc
mov dword [ebp - 0x8c], eax
sub esi, ecx
mov ecx, dword [ebp - 0x6c]
mov dword [ebp - 0x74], esi
sub ebx, ecx
imul esi, ebx
mov dword [ebp - 0xa4], ebx
mov dword [esp + 4], 8
mov dword [esp + 8], esi
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov ebx, dword [ebp - 0x98]
call ebx
mov edi, dword [ebp - 0x8c]
mov dword [ebp - 0xac], eax
sub esp, 0xc
test edi, edi
je 0x64a6f191
test eax, eax
je 0x64a6f191
mov eax, dword [ebp - 0x90]
mov edx, dword [ebp - 0x88]
mov dword [ebp - 0xb0], esi
add eax, 4
mov dword [ebp - 0x78], eax
mov eax, dword [ebp - 0x70]
lea eax, [edx + eax*2]
mov dword [ebp - 0x88], eax
jmp 0x64a6ed43
add dword [ebp - 0x78], 8
add edx, 2
cmp dword [ebp - 0x88], edx
je 0x64a6ee40
mov dword [esp + 0x18], 0x64ab9ed0
mov eax, dword [ebp - 0x8c]
mov dword [esp + 0x14], eax
mov eax, dword [ebp - 0x64]
mov dword [esp + 0x10], eax
mov eax, dword [ebp - 0x84]
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0x80]
mov dword [esp + 8], eax
movzx eax, word [edx]
mov dword [ebp - 0x70], edx
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x7c]
mov dword [esp], eax
call sym._GetGlyphOutlineW_28
mov edx, dword [ebp - 0x70]
sub eax, 1
sub esp, 0x1c
cmp eax, 0xfffffffd
ja 0x64a6ed30
mov eax, dword [ebp - 0x78]
mov ebx, dword [ebp - 0x28]
add ebx, dword [eax - 4]
mov eax, dword [eax]
sub eax, dword [ebp - 0x24]
mov ecx, eax
mov eax, dword [ebp - 0x30]
lea esi, [eax + 3]
and esi, 0xfffffffc
mov edi, esi
mov esi, dword [ebp - 0x2c]
test esi, esi
je 0x64a6ed30
mov esi, dword [ebp - 0x6c]
mov dword [ebp - 0x70], edi
mov dword [ebp - 0x9c], edx
sub ecx, esi
mov esi, dword [ebp - 0x74]
imul ecx, esi
mov esi, dword [ebp - 0x68]
sub ebx, esi
mov esi, dword [ebp - 0xac]
add ecx, ebx
mov ebx, dword [ebp - 0x8c]
add ecx, esi
xor esi, esi
test eax, eax
je 0x64a6ee27
lea esi, [esi]
xor edx, edx
lea esi, [esi]
movzx edi, byte [ecx + edx]
movzx eax, byte [ebx + edx]
add eax, edi
mov edi, 0x40
cmp eax, edi
cmovg eax, edi
mov byte [ecx + edx], al
mov eax, dword [ebp - 0x30]
add edx, 1
cmp edx, eax
jb 0x64a6edf0
add esi, 1
cmp esi, dword [ebp - 0x2c]
jae 0x64a6ee27
mov edi, dword [ebp - 0x74]
add ecx, edi
mov edi, dword [ebp - 0x70]
add ebx, edi
test eax, eax
jne 0x64a6ede8
mov edx, dword [ebp - 0x9c]
add dword [ebp - 0x78], 8
add edx, 2
cmp dword [ebp - 0x88], edx
jne 0x64a6ed43
mov eax, dword [ebp - 0x90]
mov esi, dword [ebp - 0xb0]
mov dword [esp + 4], 0
mov ebx, dword fs:[0x18]
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x30]
shl esi, 2
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov edi, dword [ebp - 0xa0]
call edi
mov eax, dword [ebp - 0x7c]
sub esp, 0xc
mov dword [esp], eax
call sym._DeleteDC_4
mov eax, dword [ebp - 0xa8]
sub esp, 4
mov dword [esp], eax
call sym._DeleteObject_4
mov eax, dword [ebp - 0x8c]
sub esp, 4
mov dword [esp + 8], eax
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call edi
sub esp, 0xc
mov dword [esp + 8], esi
mov dword [esp + 4], 8
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0x98]
call eax
mov dword [ebp - 0x78], eax
sub esp, 0xc
test eax, eax
je 0x64a6f2f8
mov ecx, eax
mov eax, dword [ebp - 0x68]
mov edi, dword [ebp - 0xa4]
mov dword [ebp - 0x40], eax
mov eax, dword [ebp - 0x6c]
mov dword [ebp - 0x34], edi
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x74]
lea esi, [eax*4]
mov dword [ebp - 0x38], eax
mov dword [ebp - 0x70], esi
mov dword [esp + 4], eax
lea eax, [ebp - 0x40]
mov dword [esp], eax
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp - 0x94]
call sym._brush_fill_pixels
mov esi, eax
test eax, eax
jne 0x64a6f2b0
test edi, edi
jle 0x64a6ef89
mov eax, dword [ebp - 0x74]
test eax, eax
jle 0x64a6ef89
mov esi, dword [ebp - 0x78]
xor edi, edi
lea ebx, [esi + 3]
mov esi, dword [ebp - 0xac]
add esi, eax
lea esi, [esi]
mov eax, dword [ebp - 0x74]
mov dword [ebp - 0x64], edi
mov ecx, esi
mov edx, ebx
sub ecx, eax
lea esi, [esi]
movzx eax, byte [edx]
movzx edi, byte [ecx]
add ecx, 1
add edx, 4
imul eax, edi
sar eax, 6
mov byte [edx - 4], al
cmp ecx, esi
jne 0x64a6ef58
mov eax, dword [ebp - 0x70]
mov edi, dword [ebp - 0x64]
add ebx, eax
mov eax, dword [ebp - 0x74]
add edi, 1
add esi, eax
cmp dword [ebp - 0xa4], edi
jne 0x64a6ef48
mov esi, dword [ebp - 0xac]
mov dword [esp + 4], 0
mov eax, dword fs:[0x18]
mov dword [esp + 8], esi
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0xa0]
call eax
mov ebx, dword [ebp - 0x94]
sub esp, 0xc
mov dword [esp], ebx
call sym._gdi_transform_acquire
mov dword [esp + 0x14], 0x26200a
mov dword [esp + 0x10], 0
mov eax, dword [ebp - 0x70]
mov dword [esp + 0xc], eax
mov eax, dword [ebp - 0xa4]
mov dword [esp + 8], eax
mov eax, dword [ebp - 0x74]
mov dword [esp + 4], eax
mov eax, dword [ebp - 0x78]
mov dword [esp], eax
mov ecx, dword [ebp - 0x6c]
mov eax, ebx
mov edx, dword [ebp - 0x68]
call sym._alpha_blend_pixels_hrgn
mov esi, eax
mov eax, dword [ebx + 0x7c]
test eax, eax
jle 0x64a6f27a
cmp eax, 1
je 0x64a6f24d
mov ebx, dword [ebp - 0x94]
sub eax, 1
mov dword [ebx + 0x7c], eax
mov ebx, dword [ebp - 0x78]
mov dword [esp + 4], 0
mov eax, dword fs:[0x18]
mov dword [esp + 8], ebx
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0xa0]
call eax
mov eax, esi
sub esp, 0xc
lea esp, [ebp - 0xc]
pop ebx
pop esi
pop edi
pop ebp
ret
test byte [0x64ab50b0], 2
jne 0x64a6f168
mov esi, dword [ebp - 0x90]
mov dword [esp + 4], 0
mov eax, dword fs:[0x18]
mov dword [esp + 8], esi
mov eax, dword [eax + 0x30]
mov esi, 1
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0xa0]
call eax
mov eax, dword [ebp - 0x7c]
sub esp, 0xc
mov dword [esp], eax
call sym._DeleteDC_4
mov eax, dword [ebp - 0xa8]
sub esp, 4
mov dword [esp], eax
call sym._DeleteObject_4
sub esp, 4
lea esp, [ebp - 0xc]
mov eax, esi
pop ebx
pop esi
pop edi
pop ebp
ret
lea eax, [ebp - 0x48]
mov dword [esp + 8], 1
mov dword [esp + 4], eax
mov dword [esp], esi
call sym.gdiplus.dll_GdipTransformMatrixPoints
sub esp, 0xc
jmp 0x64a6ea74
mov eax, dword [ebp - 0x70]
mov dword [esp + 4], ebx
mov dword [esp], esi
mov dword [esp + 8], eax
call sym.gdiplus.dll_GdipTransformMatrixPoints
sub esp, 0xc
jmp 0x64a6e9b9
mov eax, dword [ebp - 0x90]
mov dword [eax + 4], 0
mov eax, dword [sym.imp.kernel32.dll_HeapFree]
mov dword [ebp - 0xa0], eax
jmp 0x64a6eb20
mov esi, dword [ebp - 0x90]
mov dword [esp + 4], 0
mov eax, dword fs:[0x18]
mov dword [esp + 8], esi
mov eax, dword [eax + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0xa0]
call eax
mov eax, dword [ebp - 0x7c]
sub esp, 0xc
mov dword [esp], eax
call sym._DeleteDC_4
mov eax, dword [ebp - 0xa8]
sub esp, 4
mov dword [esp], eax
call sym._DeleteObject_4
sub esp, 4
lea esp, [ebp - 0xc]
xor esi, esi
pop ebx
mov eax, esi
pop esi
pop edi
pop ebp
ret
mov dword [esp + 0xc], str.GetGlyphOutlineW_failed_n
mov dword [esp + 8], str.SOFTWARE_GdipDrawDriverString
mov dword [esp + 4], 0x64ab50b0
mov dword [esp], 1
call sym._wine_dbg_log.constprop.1_3
jmp 0x64a6f060
mov eax, dword [ebp - 0x8c]
mov dword [esp + 4], 0
mov ebx, dword fs:[0x18]
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov esi, dword [ebp - 0xa0]
call esi
mov eax, dword [ebp - 0xac]
sub esp, 0xc
mov dword [esp + 8], eax
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call esi
mov eax, dword [ebp - 0x90]
sub esp, 0xc
mov dword [esp + 8], eax
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call esi
mov eax, dword [ebp - 0x7c]
sub esp, 0xc
mov dword [esp], eax
call sym._DeleteDC_4
mov eax, dword [ebp - 0xa8]
sub esp, 4
mov dword [esp], eax
call sym._DeleteObject_4
sub esp, 4
mov esi, 3
jmp 0x64a6f0b0
mov eax, dword [ebp - 0x90]
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov eax, dword [edi + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call dword [sym.imp.kernel32.dll_HeapFree]
sub esp, 0xc
jmp 0x64a6f21d
mov ebx, dword [ebp - 0x94]
mov edx, dword [ebx]
test edx, edx
je 0x64a6f014
mov eax, dword [ebx + 0x80]
mov dword [esp], edx
mov dword [esp + 4], eax
call sym._RestoreDC_8
mov eax, dword [ebx + 0x7c]
sub esp, 8
jmp 0x64a6f014
test byte [0x64ab50b0], 2
je 0x64a6f020
mov dword [esp + 0xc], str.called_without_matching_gdi_transform_acquire_n
mov dword [esp + 8], str.gdi_transform_release
mov dword [esp + 4], 0x64ab50b0
mov dword [esp], 1
call sym._wine_dbg_log.constprop.1_3
jmp 0x64a6f020
mov eax, dword [ebp - 0xac]
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov edi, dword [ebp - 0xa0]
call edi
mov eax, dword [ebp - 0x78]
sub esp, 0xc
mov dword [esp + 8], eax
mov dword [esp + 4], 0
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
call edi
sub esp, 0xc
jmp 0x64a6f0b0
mov eax, dword [ebp - 0xac]
mov dword [esp + 4], 0
mov dword [esp + 8], eax
mov eax, dword [ebx + 0x30]
mov eax, dword [eax + 0x18]
mov dword [esp], eax
mov eax, dword [ebp - 0xa0]
call eax
sub esp, 0xc
jmp 0x64a6f21d