Turning a SIGSEGV into a regular function call under Linux, allowing throw

deadalnix deadalnix at gmail.com
Wed Mar 14 14:25:28 PDT 2012


Le 14/03/2012 21:53, Steven Schveighoffer a écrit :
> On Wed, 14 Mar 2012 16:45:49 -0400, Don Clugston <dac at nospam.com> wrote:
>
>> On 14/03/12 21:31, Steven Schveighoffer wrote:
>>> On Wed, 14 Mar 2012 16:08:29 -0400, Don Clugston <dac at nospam.com> wrote:
>>>
>>>> Now, your user space handler will cause another segfault when it does
>>>> the mov [ESP], 0. I think that gives you an infinite loop.
>>>
>>> SEGFAULT inside a SEGV signal handler aborts the program (no way to turn
>>> this off IIRC).
>>>
>>> -Steve
>>
>> But you're not inside the signal handler when it happens. You returned.
>
> Then how does the signal handler do anything? I mean, doesn't it need a
> stack? Or does it just affect register variables? Most signal handlers
> are normal functions, and isn't there some usage of the stack to save
> registers?
>
> It seems there should be a way to turn off the signal handler during the
> time when you are suspicous of the stack being the culprit, then
> re-engage the signal handler before throwing the error.
>
> -Steve

The address of the instruction being executed is hijacked, so, instead 
of resuming normal operation after the signal handler exit, it get into 
the throwing handler.

This is a very nice trick !


More information about the Digitalmars-d mailing list