The disassembly of the failure shows we have written to eax, and info regs shows eax of 0x00. dis 0x4e4a20 shows the routine where the return value is set up in eax, and some debugging shows the initial problem is a path problem. The routine parses the input path which inder windows is c:\path\to\KEEPER95.exe and under wine is KEEPER95. It searches backwards for the last backslash and returns a pointer to the backslash or 0x00. If 0x00, the trap occurs...
Now the question is where does the full path come from.
Hmmm.
Following the path we are playing with back a bit, it is built up and looks extremely like the command line (Since if I add command line options, they are added as an array to where this comes from).. In fact, I can get back to an address where at the very first breakpoint the full path is in the place it will be eventually copied from.
Now a simple test pgm: void main(int count, char *argv[]) { printf("Argv[0] = %s\n", argv[0]); }
Shows that you only get the program name when run, so it leaves the question how the full path is supplied.
With some experimentation with a GUI pgm I think I stumbled upon the / an answer: Bug#1 - GetCommandLine() returns a full path on Windows but no path on Wine
Bug#2 (which will fix bug #1) - Wines PEB stores the short path not the full path Playing with windbg (then ctrl+E to load executable), the peb on windows shows the peb->CommandLine is the full path. I suspect this must be the bug then, but I cant see the app is accessing this, unless it goes to the PEB directly. eg: 0:000> !peb PEB at 7ffdf000 WindowTitle: 'C:\temp\wine\dk\test.exe' ImageFile: 'C:\temp\wine\dk\test.exe' CommandLine: 'C:\temp\wine\dk\test.exe '
However, changing anything to do with paths on wine is an art form to itself, so I will leave the fix to someone else!
Note: wine C:\DK\KEEPER95 gets things significantely further (flash screen) before the next crash.
Thats it for me on this problem, Sorry! Jason
PS Anyone know if MSDEV has the ability to debug pgms under wine yet? PPS I really wish the winedbg had a memory dump routine (bytes + ascii)... is it possible with the cmd set available?