Am Donnerstag, den 11.09.2008, 18:21 +0200 schrieb Martin Profittlich:
In this particular case, I think the crash log does not really indicate an alignment problem, but a "x/i $eip" in winedbg on the crash might help to check further. I suspect a [edx-1] address while edx contains a NULL pointer.
x/i $eip does not show anything after the address.
Seems like winedbg dislikes SSE2.
x $eip shows 3004290f
Thats movapd [esi+eax],xmm0 if my table-lookup-skills did not fool me. movapd is an instruction that needs the memory address 16 byte aligned. eax is 0x00040000 (2^18) [from 1], probably some kind of index into a buffer, whereas esi is 0x6d50028. Is the size of SUBHEAP 0x28 by any chance? Then esi is a pointer to a block allocated in a fresh heap rooted at 0x6d50000.
So you should find out where the HeapAlloc call was issued from that returned 0x6d50028. If it was from a wine dll, that dll might need to be fixed to ensure more strict alignment (might be some kind of audio buffer in dsound stuff); if it is directly from guitar rig, wine has to implement the needed alignment in its ntdll implementation.