• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ptrace PT_CONTINUE
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ptrace PT_CONTINUE


  • Subject: Re: ptrace PT_CONTINUE
  • From: Thierry bultel <email@hidden>
  • Date: Thu, 09 Jul 2009 10:04:02 +0200

Hi Aron,

I think I understand what happens here.
Your code actually works, and temporaty resumes the child.

But as the parent immediately exits after, it dies, and causes the child death as well.

The fix is to simply add that portion of code:

for (;;) {
        sleep (1);
        printf("parent alive\n");
    }

after your call to ptrace(PT_CONTINUE )

As a rule, a ptrace based debugger is normally an infinite loop of wait calls ...

Hope this helps,
Thierry

Aron-Zvi a écrit :
Hey guys,

I'm trying to get started with basic ptrace functionality with the following:


#include <sys/types.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char **argv)
{
    int pid, status, ret;
   
    if((pid = fork()) == 0)
    {
        ptrace(PT_TRACE_ME,0,0,0);
        execl(argv[1],argv[1],0);
        printf("exec failed\n");
    }
    else{
        wait(&status);
        if(WIFSTOPPED(status))
            printf("child has stopped. child pid: %d\n", pid);
        errno = 0;
        ret = ptrace(PT_CONTINUE, pid, (caddr_t)1, 0);       
        printf("ret: %d\n", ret);
        printf("errno: %s\n", strerror(errno));   
    }

}

>From my basic understanding, what the above should do is fork a child process which will stop at exec and cause the parent-tracing process to exit wait(). The parent process should then have the child process continue execution normally by calling ptrace() with PT_CONTINUE.

When I run the code, The child process is created, however, ptrace() with PT_CONTINUE seems to fail as the child process does not continue normal execution. ptrace's return value is 0 and errno is "Unknown error: 0".

Running output:

aronzvis-macbook:ptrace_test aronzvi$ ./ptrace ../voidinc
child has stopped. child pid: 37959
ret: 0
errno: Unknown error: 0


I'm running OS X 10.5.7 and building the code with the 10.5 SDK.

Your help is much appreciated,

Aron-Zvi

_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

begin:vcard
fn:Thierry Bultel
n:Bultel;Thierry
org:Atempo SA;V.O.S team
adr;dom:;;+33297683688
email;internet:email@hidden
title:Software engineer
tel;work:+33297683688
note;quoted-printable:=0D=0A=
	=0D=0A=

version:2.1
end:vcard

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: ptrace PT_CONTINUE
      • From: Terry Lambert <email@hidden>
    • Re: ptrace PT_CONTINUE
      • From: Aron-Zvi <email@hidden>
References: 
 >ptrace PT_CONTINUE (From: Aron-Zvi <email@hidden>)

  • Prev by Date: Re: ptrace PT_CONTINUE
  • Next by Date: Re: ptrace PT_CONTINUE
  • Previous by thread: Re: ptrace PT_CONTINUE
  • Next by thread: Re: ptrace PT_CONTINUE
  • Index(es):
    • Date
    • Thread