[Bug 30745] GOG.com version of Soulbringer crashes on startup (GetModuleHandleExW needs to support GET_MODULE_HANDLE_EX_FLAG_PIN)

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Oct 12 07:31:27 CDT 2013


http://bugs.winehq.org/show_bug.cgi?id=30745

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
                 CC|                            |focht at gmx.net
          Component|-unknown                    |kernel32
            Summary|Soulbringer, GOG version,   |GOG.com version of
                   |crashes at start, no splash |Soulbringer crashes on
                   |screen even.                |startup (GetModuleHandleExW
                   |                            |needs to support
                   |                            |GET_MODULE_HANDLE_EX_FLAG_P
                   |                            |IN)
     Ever Confirmed|0                           |1

--- Comment #7 from Anastasius Focht <focht at gmx.net> 2013-10-12 07:31:27 CDT ---
Hello folks,

confirming.
Bought the game for a few bucks just for analysis. 

In short: There is an in-process patcher dll that requires to stay in memory
until the process exits (makes use of GET_MODULE_HANDLE_EX_FLAG_PIN flag which
Wine doesn't implement).

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/GOG.com/Soulbringer
...
$ WINEDEBUG=+tid,+seh,wine ./Soulbringer.exe
...
0009:trace:loaddll:load_native_dll Loaded L"C:\\Program
Files\\GOG.com\\Soulbringer\\PATCH.dll" at 0x3c0000: native
0009:trace:loaddll:load_native_dll Loaded L"C:\\Program
Files\\GOG.com\\Soulbringer\\data\\Stealth\\Render\\D3d6Lib.dll" at 0x10000000:
native
...
0009:fixme:module:GetModuleHandleExW should pin refcount for 0x3c0000
...
0009:trace:loaddll:free_modref Unloaded module L"C:\\Program
Files\\GOG.com\\Soulbringer\\data\\Stealth\\Render\\D3d6Lib.dll" : native
0009:trace:loaddll:free_modref Unloaded module L"C:\\Program
Files\\GOG.com\\Soulbringer\\PATCH.dll" : native
...
0009:trace:loaddll:load_native_dll Loaded L"C:\\Program
Files\\GOG.com\\Soulbringer\\PATCH.dll" at 0x3c0000: native
0009:trace:loaddll:load_native_dll Loaded L"C:\\Program
Files\\GOG.com\\Soulbringer\\D3d7Lib.dll" at 0x10000000: native
...
0009:fixme:module:GetModuleHandleExW should pin refcount for 0x3c0000
...
0009:trace:loaddll:free_modref Unloaded module L"C:\\Program
Files\\GOG.com\\Soulbringer\\D3d7Lib.dll" : native
0009:trace:loaddll:free_modref Unloaded module L"C:\\Program
Files\\GOG.com\\Soulbringer\\PATCH.dll" : native
0009:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\dinput.dll" : builtin
0009:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\winmm.dll" : builtin
0009:trace:loaddll:free_modref Unloaded module
L"C:\\windows\\system32\\msacm32.dll" : builtin
0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x3c2320 ip=003c2320
tid=0009
0009:trace:seh:raise_exception  info[0]=00000000
0009:trace:seh:raise_exception  info[1]=003c2320
0009:trace:seh:raise_exception  eax=00000000 ebx=7ea69ec2 ecx=0033f8f8
edx=0016ed6d esi=0033f8f8 edi=00000000
0009:trace:seh:raise_exception  ebp=0033ea68 esp=0033ea24 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010206
0009:trace:seh:call_stack_handlers calling handler at 0x5f492e0a code=c0000005
flags=0
...
--- snip ---

When being loaded, "PATCH.dll" inserts hooks at several locations in main
executable.
The game code eventually hits such a hook while the dll was already unloaded
(not pinned in memory).

MSDN for GetModuleHandleEx():
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683200%28v=vs.85%29.aspx

Source:
http://source.winehq.org/git/wine.git/blob/c0e72bb3626a7ba8090ee07cc0aa88cd5c8b7f9e:/dlls/kernel32/module.c#l505

--- snip ---
505 BOOL WINAPI GetModuleHandleExW( DWORD flags, LPCWSTR name, HMODULE *module
)
506 {
...
538     if (status == STATUS_SUCCESS)
539     {
540         if (flags & GET_MODULE_HANDLE_EX_FLAG_PIN)
541             FIXME( "should pin refcount for %p\n", ret );
542         else if (!(flags & GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT))
543             LdrAddRefDll( 0, ret );
544     }
...
554     return (status == STATUS_SUCCESS);
555 }
--- snip ---

$ du -sh setup_soulbringer.exe 
828M    setup_soulbringer.exe

$ sha1sum setup_soulbringer.exe 
5be1a70a24e37212bfeaa02a29d8d86af9cf2fca  setup_soulbringer.exe

$ wine --version
wine-1.7.4

Regards

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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