ntdll: Program could modify Dr* registers in segv_handler too.

Peter Beutner p.beutner at gmx.net
Sun Dec 11 12:23:18 CST 2005


Vitaliy Margolen schrieb:
> Sunday, December 11, 2005, 10:36:39 AM, Peter Beutner wrote:
> 
>>Vitaliy Margolen schrieb:
>>
>>>Sunday, December 11, 2005, 9:07:06 AM, Peter Beutner wrote:
>>>
>>>
>>>>Vitaliy Margolen schrieb:
>>>>
>>>>
>>>>>ChangeLog:
>>>>>ntdll: Program could modify Dr* registers in segv_handler too.
>>>>>
>>>>
>>>>Doesn't every exception handler could modify these registers?
>>>>So probably it would be better to put this check into RtlRaiseException?
>>>
>>>Nope can't. __regs_RtlRaiseException is common for all the platforms
>>>(implemented in dlls/ntdll/exception.c). While Dr* registers are not
>>>available on all the platforms.
> 
> 
>>What about putting some
>>#ifdef __i386__
>>...
>>#endif
>>around it?
> 
> 
> That's what signal_*.c are for...
The name suggests it's more about signal handling than a place to throw every arch
dependent code in it ;)
But that's not the point.
I just thought it might not be the best solution to duplicate that check in every signal
handler.
Besides what about somebody changes the Dr* registers in an exception handler invoked by
an exception raised by the application via RaiseException(i.e. not via a signal handler
called by the kernel)?
*Every* installed exception handler can change the registers in the CONTEXT structure,
thats why I think it would be the easiest way to implement it in __regs_RtlRaiseException.



More information about the wine-devel mailing list