Hi, On 29 Apr 2010, at 22:37, Garrett Cooper wrote:
> On Thu, Apr 29, 2010 at 12:06 PM, Gunnar Hinriksson <[email protected]> wrote: >> 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[]) >> { >> int pid = atoi(argv[1]); >> ptrace(PT_ATTACH, pid, 0, 0); >> wait(NULL); >> ptrace(PT_DETACH, pid, 0, 0); >> return 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 argument > 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 where > it left off. The data argument provides a signal number to > be delivered to the traced process as it resumes execution, > or 0 if no signal is to be sent. > > [...] > > PT_DETACH This request is like PT_CONTINUE, except that it does not ^^^^^^^^^^^ > allow specifying an alternate place to continue execution, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > 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. Looks to me like a bug in ptrace(PT_DETACH,...) which to agree with ptrace(2) ought either to (a) fail (EINVAL?) if addr != (caddr_t)1, or (b) ignore addr entirely; it's not clear which. OP inferred (b) which is reasonable. > HTH, > -Garrett > _______________________________________________ > [email protected] mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "[email protected]" > > -- Bob Bishop +44 (0)118 940 1243 [email protected] fax +44 (0)118 940 1295 mobile +44 (0)783 626 4518 _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]"

