Date: Thu, 29 Apr 2010 14:37:36 -0700 From: Garrett Cooper <yanefbsd@gmail.com> To: Gunnar Hinriksson <tomtinn@gmail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Ptrace segfault Message-ID: <p2i7d6fde3d1004291437y9b789015ybf8153b41e034d9f@mail.gmail.com> In-Reply-To: <q2vcbb19c781004291206sc54fdb6ag53c3a763ad364e8e@mail.gmail.com> References: <q2vcbb19c781004291206sc54fdb6ag53c3a763ad364e8e@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Apr 29, 2010 at 12:06 PM, Gunnar Hinriksson <tomtinn@gmail.com> wro=
te:
> Hello
>
> Im having a little problem using ptrace on my system.
> If I use ptrace to attach to another process the child process
> segfaults once I detach.
> For example using this simple program.
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <sys/types.h>
> #include <sys/ptrace.h>
> #include <sys/wait.h>
>
> int main(int argc, char *argv[])
> {
> =A0 =A0 =A0 =A0int pid =3D atoi(argv[1]);
> =A0 =A0 =A0 =A0ptrace(PT_ATTACH, pid, 0, 0);
> =A0 =A0 =A0 =A0wait(NULL);
> =A0 =A0 =A0 =A0ptrace(PT_DETACH, pid, 0, 0);
> =A0 =A0 =A0 =A0return 0;
> }
>
> Am I using ptrace incorrectly or is there perhaps a bug in ptrace that
> causes the child to always segfault ?
Nope -- it's a bug in your code. From ptrace(2):
PT_CONTINUE The traced process continues execution. The addr argume=
nt
is an address specifying the place where execution is to=
be
resumed (a new value for the program counter), or
(caddr_t)1 to indicate that execution is to pick up wher=
e
it left off. The data argument provides a signal number=
to
be delivered to the traced process as it resumes executi=
on,
or 0 if no signal is to be sent.
[...]
PT_DETACH This request is like PT_CONTINUE, except that it does no=
t
allow specifying an alternate place to continue executio=
n,
and after it succeeds, the traced process is no longer
traced and continues execution normally.
Note very carefully the fact that PT_DETACH is like PT_CONTINUE,
and that PT_CONTINUE says that addr references the memory where the
execution is going to be resumed.
HTH,
-Garrett
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p2i7d6fde3d1004291437y9b789015ybf8153b41e034d9f>
