Hi! I'm new to this list, but a long time Wine user and regular WWN reader.
The other day I decided to try out Semiolog, a free as-in-beer piece of software to create labels from electric equipment manufacturer Hager, under wine. The software can be downloaded from here: http://www.hager.se/files/download/0/482_1/0/SemiologSue40a.exe
Unfortunately it doesn't work. So although I haven't been doing any Windows programming in the last 15 years I decided to try to do something useful and try find out why it doesn't work. I figured that this application would be a good thing to try to get to work as it is supposedly rather trivial.
So what follows is a description of a newbies attempt at some wine debugging:
The application installs and starts up just fine, but when I try to create a new document, I get a null pointer dereference in mfc42.dll.
After messing around with with the mfc42 runtime, I managed to get a backtrace with debugging information, which looks like this:
===================================================================
wine: Unhandled page fault on read access to 0x0000003c at address 0x5f4056dd (thread 0009), starting debugger... WineDbg starting on pid 0x8 Unhandled exception: page fault on read access to 0x0000003c in 32-bit code (0x5f4056dd). In 32 bit mode. fixme:dbghelp:sffip_cb NIY on 'E:\8168\vc98\mfc\mfc.bbt\src\mfc42.pdb' fixme:dbghelp:sffip_cb NIY on 'C:\hager\Semiolog\Apps\MFC42.PDB' fixme:dbghelp_msc:codeview_parse_type_table Not adding parameters' types to function signature fixme:dbghelp_msc:codeview_parse_type_table Unsupported type-id leaf a fixme:dbghelp_msc:dump 00000000: 06 00 0a 00 01 00 50 f1 ......P. fixme:dbghelp_msc:codeview_get_type Returning NULL symt for type-id 1053
[1000's of codeview_parse_type_table messages snipped]
fixme:dbghelp_msc:codeview_snarf No current function for label $L101060
[1000's of codeview_snarf messages snipped]
Register dump: CS:0073 SS:007b DS:007b ES:007b FS:1007 GS:0033 EIP:5f4056dd ESP:7fc9d004 EBP:7fc9d0b8 EFLAGS:00010206( - 00 - RIP1) EAX:00000000 EBX:00000001 ECX:00000000 EDX:00000000 ESI:00449180 EDI:00000000 Stack dump: 0x7fc9d004: 004125f2 00000000 7ff38140 00000000 0x7fc9d014: 7ff38140 0042bb1f 00000000 00000001 0x7fc9d024: 004181b3 00000000 7ff38140 00030080 0x7fc9d034: 00418130 5f401e5c 00000001 7ff38140 0x7fc9d044: 00000000 7ff38140 7ff38140 7ff0f300 0x7fc9d054: 201cc2f0 7fc9d728 00000000 7fc9d0e8 0200: sel=1007 base=7ffdc000 limit=00001fff 32-bit rw- Backtrace: =>1 0x5f4056dd CEnumOleVerb::~CEnumOleVerb+0x37 [oleverb.cpp:61] in mfc42 (0x5f4056dd) 2 0x5f401b2c CDC::RectVisible+0x3(lpRect=0x5f401ab5) [E:\8168\vc98\mfc\mfc\include\afxwin1.inl:647] in mfc42 (0x5f401b2c) 3 0x5f401ab5 CGdiObject::~CGdiObject+0x32 [E:\8168\vc98\mfc\mfc\include\afxwin1.inl:281] in mfc42 (0x5f401ab5) 4 0x5f401a3d CMDIChildWnd::MDIDestroy+0x8 [E:\8168\vc98\mfc\mfc\include\afxwin2.inl:938] in mfc42 (0x5f401a3d) 5 0x5f4019fc AfxGetMainWnd+0x12 [E:\8168\vc98\mfc\mfc\include\afxwin1.inl:32] in mfc42 (0x5f4019fc) 6 0x62a6cb2a WINPROC_wrapper+0x1a in user32 (0x62a6cb2a) 7 0x62a6d419 in user32 (+0x9d419) (0x62a6d419) 8 0x62a7336e CallWindowProcW+0x122 in user32 (0x62a7336e) 9 0x62a3ba2e in user32 (+0x6ba2e) (0x62a3ba2e) 10 0x62a3f8c2 SendMessageTimeoutW+0x186 in user32 (0x62a3f8c2) 11 0x62a3f91f SendMessageW+0x50 in user32 (0x62a3f91f) 12 0x62a2d1be in user32 (+0x5d1be) (0x62a2d1be) 13 0x62a2e4f7 DefMDIChildProcW+0x36e in user32 (0x62a2e4f7) 14 0x62a2e801 DefMDIChildProcA+0xf2 in user32 (0x62a2e801) 15 0x5f413511 COleControl::GetMetafileData+0x87(lpFormatEtc=0x22, lpStgMedium=0x0, hAttribDC=0x22, cy=0x0, hMF=0x22) [ctlcore.cpp:827] in mfc42 (0x5f413511) 16 0x5f401ab5 CGdiObject::~CGdiObject+0x32 [E:\8168\vc98\mfc\mfc\include\afxwin1.inl:281] in mfc42 (0x5f401ab5) 17 0x5f401a3d CMDIChildWnd::MDIDestroy+0x8 [E:\8168\vc98\mfc\mfc\include\afxwin2.inl:938] in mfc42 (0x5f401a3d) 18 0x5f4019fc AfxGetMainWnd+0x12 [E:\8168\vc98\mfc\mfc\include\afxwin1.inl:32] in mfc42 (0x5f4019fc) 19 0x62a6cb2a WINPROC_wrapper+0x1a in user32 (0x62a6cb2a) 20 0x62a6d419 in user32 (+0x9d419) (0x62a6d419) 21 0x62a70f2d CallWindowProcA+0x1b5 in user32 (0x62a70f2d) 22 0x62a3b99f in user32 (+0x6b99f) (0x62a3b99f) 23 0x62a3f674 SendMessageTimeoutA+0x226 in user32 (0x62a3f674) 24 0x62a3f72f SendMessageA+0x50 in user32 (0x62a3f72f) 25 0x59a9462e X11DRV_SetWindowPos+0xf33 in winex11 (0x59a9462e) 26 0x62a6bbe3 SetWindowPos+0xb1 in user32 (0x62a6bbe3) 27 0x62a6c63a BringWindowToTop+0x4d in user32 (0x62a6c63a) 28 0x5f408ae3 COleControlContainer::CreateControl+0x31(pWndCtrl=0x0, clsid=0x0, lpszWindowName=0x0, dwStyle=0x1, ppt=0x0, psize=0x7ff11458, nID=0x10026, pPersist=0x0, bStorage=0x0, bstrLicKey=0x62a086dc, ppNewSite=0x0) [occcont.cpp:175] in mfc42 (0x5f408ae3) 29 0x00000001 (0x00000001) 30 0x00418d70 in semiolog (+0x18d70) (0x00418d70) 0x5f4056dd CEnumOleVerb::~CEnumOleVerb+0x37 [oleverb.cpp:61] in mfc42: movl 0x3c(%ecx),%eax Unable to open file 'oleverb.cpp' Modules: Module Address Debug info Name (83 modules) ELF 0x00165000-00272000 Deferred libcrypto.so.5
[boring load map snipped]
Threads: process tid prio (all id:s are in hex) 00000008 (D) C:\hager\Semiolog\Apps\Semiolog.exe 00000009 0 <== WineDbg terminated on pid 0x8
===================================================================
Now, I'm stuck with a couple of problems.
1. Looking at the first couple of lines in the backtrace, I can't really get it to make sense when I compare it to the MFC source code, i.e., I can't see how CDC::RectVisible() would end up calling ~CEnumOleVerb(), etc.
2. I can't get it to run under winedbg. Running "winedbg --auto Semiolog" causes winedbg to croak with the following output before the app even starts:
WineDbg starting on pid 0xa In 32 bit mode. 0x00345c6e: movl %edi,0x0(%esp) Modules: Module Address Debug info Name (80 modules) ELF 0x00165000-00272000 Deferred libcrypto.so.5 ELF 0x00165000-00272000 Deferred libcrypto.so.5 PE 0x00240000-00269000 Deferred dzip32 PE 0x00270000-00288000 Deferred mpr ELF 0x0028a000-002a2000 Deferred libgssapi_krb5.so.2 PE 0x00290000-002b7000 Deferred dunzip32 ELF 0x002c5000-002e9000 Deferred libk5crypto.so.3 ELF 0x002c5000-002e9000 Deferred libk5crypto.so.3 ELF 0x002c5000-002e9000 Deferred libk5crypto.so.3 PE 0x002f0000-003ea000 Export kernel32 PE 0x002f0000-003ea000 Export kernel32 PE 0x002f0000-003ea000 Export kernel32 PE 0x00400000-004c3000 Deferred semiolog ELF 0x004c3000-00558000 Deferred gdi32<elf> -PE 0x004d0000-00558000 \ gdi32 ELF 0x0055e000-0057a000 Deferred ld-linux.so.2 ELF 0x0057a000-005a6000 Deferred winspool<elf> -PE 0x00580000-005a6000 \ winspool ELF 0x0057a000-005a6000 Deferred winspool<elf> -PE 0x00580000-005a6000 \ winspool ELF 0x0057c000-006a5000 Deferred libc.so.6 PE 0x005b0000-005c3000 Deferred common PE 0x005d0000-005e6000 Deferred listctrlex ELF 0x00614000-0067a000 Deferred msvcrt<elf> -PE 0x00620000-0067a000 \ msvcrt ELF 0x006a7000-006cc000 Deferred libm.so.6 ELF 0x006ce000-006d2000 Deferred libdl.so.2 ELF 0x006d2000-0080e000 Deferred user32<elf> -PE 0x006d4000-006e7000 \ libz.so.1 -PE 0x006e9000-007bd000 \ libx11.so.6 -PE 0x006f0000-0080e000 \ user32 ELF 0x00826000-0082c000 Deferred libxxf86dga.so.1 ELF 0x0084a000-00859000 Deferred libxext.so.6 ELF 0x0084a000-00859000 Deferred libxext.so.6 PE 0x00860000-0086f000 Deferred iphlpapi ELF 0x0086f000-0088e000 Deferred ximcp.so.2 ELF 0x00899000-008ab000 Deferred libpthread.so.0 ELF 0x008ab000-00946000 Deferred comdlg32<elf> -PE 0x008b3000-008d2000 \ libexpat.so.0 -PE 0x008c0000-00946000 \ comdlg32 -PE 0x008c0000-00946000 \ comdlg32 -PE 0x008c0000-00946000 \ comdlg32 ELF 0x0093e000-00968000 Deferred libfontconfig.so.1 PE 0x00960000-00a19000 Deferred shell32 PE 0x00960000-00a19000 Deferred shell32 ELF 0x00a1d000-00a21000 Deferred libxrandr.so.2 ELF 0x00a2d000-00a38000 Deferred libnss_files.so.2 ELF 0x00a38000-00a55000 Deferred imm32<elf> -PE 0x00a40000-00a55000 \ imm32 ELF 0x00a55000-00a88000 Deferred uxtheme<elf> -PE 0x00a60000-00a88000 \ uxtheme ELF 0x00a95000-00ad8000 Deferred advapi32<elf> -PE 0x00aa0000-00ad8000 \ advapi32 ELF 0x00b1a000-00c10000 Deferred libwine_unicode.so.1 ELF 0x00b36000-00bb1000 Deferred libgl.so.1 ELF 0x00b81000-00b9f000 Deferred libcups.so.2 ELF 0x00c10000-00ca9000 Deferred ole32<elf> -PE 0x00c20000-00ca9000 \ ole32 ELF 0x00cb8000-00d18000 Deferred shlwapi<elf> -PE 0x00cd0000-00d18000 \ shlwapi ELF 0x00d18000-00d61000 Deferred rpcrt4<elf> -PE 0x00d1c000-00d26000 \ libxcursor.so.1 -PE 0x00d28000-00d60000 \ libssl.so.5 -PE 0x00d30000-00d61000 \ rpcrt4 ELF 0x00d61000-00e29000 Deferred comctl32<elf> -PE 0x00d70000-00e29000 \ comctl32 -PE 0x00d70000-00e29000 \ comctl32 -PE 0x00d70000-00e29000 \ comctl32 -PE 0x00d70000-00e29000 \ comctl32 ELF 0x00e67000-00ee5000 Deferred ntdll<elf> -PE 0x00e80000-00ee5000 \ ntdll ELF 0x00ee5000-00f83000 Deferred oleaut32<elf> -PE 0x00f00000-00f83000 \ oleaut32 ELF 0x00feb000-01073000 Deferred winex11<elf> -PE 0x01000000-01073000 \ winex11 ELF 0x068a4000-06916000 Deferred libkrb5.so.3 ELF 0x06c20000-06c25000 Deferred libxxf86vm.so.1 PE 0x10000000-1000b000 Deferred hcore PE 0x5f400000-5f4f2000 Deferred mfc42 ELF 0x5fa38000-5fc15000 Deferred i915_dri.so ELF 0x7bf00000-7bf03000 Deferred <wine-loader> Threads: process tid prio (all id:s are in hex) 0000000a (D) C:\hager\Semiolog\Apps\Semiolog.exe 0000000b 0 <== WineDbg terminated on pid 0xa wine client error:b: write: Bad file descriptor
[100's of Bad file descriptor errors just like the one above]
wine client error:b: err:seh:setup_exception stack overflow 292 bytes in thread 000b eip 0014bb0e esp 7fb80edc stack 0x7fb81000-0x7fc90000
Any clues?
Cheers, -- Christer Palm
On Sat, Jan 14, 2006 at 08:41:50PM +0100, Christer Palm wrote:
Hi! I'm new to this list, but a long time Wine user and regular WWN reader.
The other day I decided to try out Semiolog, a free as-in-beer piece of software to create labels from electric equipment manufacturer Hager, under wine. The software can be downloaded from here: http://www.hager.se/files/download/0/482_1/0/SemiologSue40a.exe
Unfortunately it doesn't work. So although I haven't been doing any Windows programming in the last 15 years I decided to try to do something useful and try find out why it doesn't work. I figured that this application would be a good thing to try to get to work as it is supposedly rather trivial.
So what follows is a description of a newbies attempt at some wine debugging:
The application installs and starts up just fine, but when I try to create a new document, I get a null pointer dereference in mfc42.dll.
After messing around with with the mfc42 runtime, I managed to get a backtrace with debugging information, which looks like this:
=>1 0x5f4056dd CEnumOleVerb::~CEnumOleVerb+0x37 [oleverb.cpp:61] in mfc42 (0x5f4056dd)
You should find out what it does before.
Capture a WINEDEBUG=+relay,+seh trace (redirect output to a logfile).
Then look at this trace, search for the winedbg call and scroll back until the RaiseException with c00000005 code (likely only some dozen lines above the initial debugger start).
The look backwards from this to see where it might have got this NULL pointer... :/
If its bad, it could have got it from millions of lines ago. :/
Ciao, Marcus
Marcus Meissner wrote:
On Sat, Jan 14, 2006 at 08:41:50PM +0100, Christer Palm wrote:
After messing around with with the mfc42 runtime, I managed to get a backtrace with debugging information, which looks like this:
=>1 0x5f4056dd CEnumOleVerb::~CEnumOleVerb+0x37 [oleverb.cpp:61] in mfc42 (0x5f4056dd)
You should find out what it does before.
Capture a WINEDEBUG=+relay,+seh trace (redirect output to a logfile).
Then look at this trace, search for the winedbg call and scroll back until the RaiseException with c00000005 code (likely only some dozen lines above the initial debugger start).
The look backwards from this to see where it might have got this NULL pointer... :/
If its bad, it could have got it from millions of lines ago. :/
Hello Marcus and thanks for your response!
OK, sounds a bit ad-hoc to me but I'm sure that you're talking from experience. In the relay trace, I can see that just before the exception is raised, it sits in a loop calling:
0009:Call user32.ShowWindow(00000000,00000000) ret=5f4056f5 0009:Ret user32.ShowWindow() retval=00000000 ret=5f4056f5
33 times (same return address each time), which looks a bit suspicious to me (HWND being 0). The return address is in MFC42, but as winedbg refuses to run the dang thing I can't resolve that into the actual MFC function or set any breakpoints or anything.
So, looking a bit further up in the trace, my best bet is that it's getting that HWND from:
0009:Call user32.GetParent(00010026) ret=5f401281 ... 0009:Ret user32.GetParent() retval=00000000 ret=5f401281
But that's just a wild guess. 00010026 seems to the apps main window, because I see a lot of activity on that HWND before the crash - for example:
0009:Call user32.DrawMenuBar(00010026) ret=5f4136d0 ... 0009:Ret user32.DrawMenuBar() retval=00000001 ret=5f4136d0
And I can see the menu bar of the main (top) window being updated just before the crash. I played around a bit with the graphics settings in winecfg with no result other than that I've now managed to lock myself out of wine (including winecfg) by specifying an invalid display depth :-(
Does anyting of this make sense?
Cheers, -- Christer Palm