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>