[Bug 49116] New: Windows 10 1903 SDK (10.0.18362.0) installer crashes (method invocation on wrong CCW interface?)
WineHQ Bugzilla
wine-bugs at winehq.org
Thu May 7 21:27:11 CDT 2020
https://bugs.winehq.org/show_bug.cgi?id=49116
Bug ID: 49116
Summary: Windows 10 1903 SDK (10.0.18362.0) installer crashes
(method invocation on wrong CCW interface?)
Product: Wine
Version: 5.7
Hardware: x86
URL: https://web.archive.org/web/20200215010843/https://dow
nload.microsoft.com/download/4/2/2/42245968-6A79-4DA7-
A5FB-08C0AD0AE661/windowssdk/winsdksetup.exe
OS: Linux
Status: NEW
Keywords: download
Severity: normal
Priority: P2
Component: mscoree
Assignee: wine-bugs at winehq.org
Reporter: z.figura12 at gmail.com
Distribution: ---
It calls _AppDomain::CreateInstance() from unmanaged code to retrieve a COM
pointer to one of its own objects (specifically,
BootstrapperApplicationFactory, hosted in BootstrapperCore.dll), and then tries
to invoke a method on the object. The problem is that the method it invokes has
vtbl offset 0x38, but Mono gives us back what *seems* to be an IDispatch vtbl,
so it ends up invoking junk. This consistently results in an execute fault for
me.
Relevant disassembly, from mbahost.dll:
1286: 8b 45 08 >mov eax, [ebp+08h]
1289: 8d 55 fc lea edx, [ebp-04h]
128c: 52 push edx
128d: 57 push edi
128e: 53 push ebx
128f: 8b 08 mov ecx, [eax]
1291: 50 push eax
1292: ff 91 94 00 00 00 call dword [ecx+00000094h] //
CreateInstance(), apparently
1298: 8b f0 mov esi, eax
129a: 85 f6 test esi, esi
129c: 79 08 jns 12a6 // jump if SUCCEEDED
129e: 56 push esi
129f: 68 1f 02 00 00 push dword 0000021Fh
12a4: eb 48 jmp 12ee
12a6: 8b 45 fc >mov eax, [ebp-04h]
12a9: 8d 55 ec lea edx, [ebp-14h]
12ac: 52 push edx
12ad: 50 push eax
12ae: 8b 08 mov ecx, [eax]
12b0: ff 51 38 call dword [ecx+38h] // crashes
Presumably Mono is wrong in returning IDispatch here, but I'm not sure why, and
it's not clear what should be returned in its stead. The class in question
actually has a ClassInterfaceType of AutoDispatch, but maybe that doesn't
actually mean we should return IDispatch? But the CIL interface that class
explicitly implements, IBootstrapperApplicationFactory, only has one method, so
I'm not sure how an offset of 0x38 makes sense there either.
When I get the time I'll build and run a testcase...
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list