Re: Stepping over longjmp presumably broken for glibc

Daniel Jacobowitz
2005-12-23T13:20:45Z

On Fri, Dec 23, 2005 at 10:25:04AM +0200, Eli Zaretskii wrote:
> > Date: Thu, 22 Dec 2005 16:17:34 -0500
> > From: Daniel Jacobowitz <drow@false.org>
> > Cc: libc-alpha@sourceware.org
> >
> > Current versions of glibc for many platforms xor the saved PC with a
> > randomized canary, so setting a breakpoint at that "address" isn't
> > going to work especially well.
>
> How does glibc restore the correct address when you call longjmp? Do
> they save the canary in some place, or something?

Yes. However, where it is safed is not a public ABI, and varies wildly
by architecture; I wouldn't care to try to reverse it in GDB, personally.
For instance, during ld.so bootstrapping it's in a global variable
named __pointer_chk_guard; if the platform supports TLS, then later in
execution it will be at some architecture-dependent offset from the
thread pointer.

--
Daniel Jacobowitz
CodeSourcery, LLC