https://bugs.winehq.org/show_bug.cgi?id=33037
--- Comment #14 from Anastasius Focht focht@gmx.net --- Hello folks,
revisiting, still present.
--- snip --- ... Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x00411c09). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:00411c09 ESP:0033b498 EBP:00000000 EFLAGS:00010212( R- -- I -A- - ) EAX:224002eb EBX:ffffff31 ECX:0033bbcc EDX:7ec81764 ESI:00000000 EDI:0000004e Stack dump: 0x0033b498: 0000004e 0033bbcc ffffff31 00411474 0x0033b4a8: 00426498 0004005e 00413747 00000001 0x0033b4b8: 0033c9d0 0033c3b8 7ec42000 00000001 0x0033b4c8: 0033b4d8 7bc39504 7eae75e8 7bcd1000 0x0033b4d8: 0033b538 7bc4de89 00110014 ffffffff 0x0033b4e8: 0033b4f8 7bc394e6 7eae75e8 00000001 000c: sel=0067 base=00000000 limit=00000000 16-bit --x Backtrace: =>0 0x00411c09 in setup (+0x11c09) (0x00000000) 0x00411c09: cmpb $0x0,0x0(%esi) Modules: Module Address Debug info Name (65 modules) PE 400000- 48f000 Export setup ... Threads: process tid prio (all id:s are in hex) ... 00000034 (D) Z:\home\focht\iso\SETUP.exe 00000035 0 <== ... --- snip ---
Adding my workaround from appdb entry also here (scripting 'winedbg' in gdb proxy mode, patching the ISO installer at runtime).
Save the following snippet to a text file, for example 'vc6-installer-fix': --- snip --- set $x=0x410000 set $end=0x420000 while(*++$x != 0x07B0B18B && $x < $end) end if $x != $end set *(int*) $x = 0x5BC0335E set *(int*)($x+4) = 0x900004C2 end cont --- snip ---
Run the debugger as follows:
--- snip --- $ winedbg --gdb setup.exe < vc6-installer-fix --- snip ---
If the installer spawns a sub-installer that crashes due to this bug, you must first run the main installer and then attach to sub-installer with debugger.
This can be done in automated way, assuming the main installer has already the started sub-installer:
--- snip --- $ winedbg --gdb $(( 16#$(winedbg --command "info proc" | grep YOUR_SUB_INSTALLER_PROCESS_NAME | cut -f 2 -d " ") )) < vc6-installer-fix --- snip ---
It tells 'winedbg' to query process ids, filters out the target process, converts the PID to decimal and then starts winedbg in gdb proxy mode, attaching to target process and executing patch script.
This should work for all VC6 installers and even 'Embedded Visual C++' 4.x ones.
$ wine --version wine-1.7.24-150-gcf4404c
Regards