http://bugs.winehq.org/show_bug.cgi?id=28089
Summary: exception handling code touches stack for exceptions handled by the debugger Product: Wine Version: unspecified Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: bernhardloos@googlemail.com
Created an attachment (id=35971) --> (http://bugs.winehq.org/attachment.cgi?id=35971) a hack to work around the problem
Wine places the CONTEXT and EXCEPTION_RECORD structures onto the stack past ESP during the unix signal handler and continues with most of the exception handling code outside of the signal handler. Unfortunately and contrary to windows behavior the debugger gets notified only after this happens. Windows doesn't touch the stack at all, if the exception is handled by the debugger. This makes it very hard to single step trough code which keeps useful data past ESP (securom 8 for example).
it's easy to show with this small test:
void foo() { char *x = 0, *y = 0, *from = 0, *to = 0; char c;
x = &c; y = &c - 500;
while (y != x) *y++ = 0x55;
c = 0x77; /* single step a few times here */ y = &c - 500;
while (y != x) { if (*y != 0x55) if (from) to = y; else from = y; y++; } /* to and from shoudl be NULL */ }