IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Biblioth�ques Discussion :

Ptrace Comment �a marche?


Sujet :

Biblioth�ques

  1. #1
    Membre confirm�
    Inscrit en
    D�cembre 2006
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 84
    Par d�faut Ptrace Comment �a marche?
    Bonjour,

    Dans le man il est dit que ptrace permet d'�diter l'image m�moire du processus trac�.

    Mon probleme est que je n'arrive pas � r�cup�rer cette image m�moire. Je r�cupere la valeur renvoyer par ptrace, la valeur de errno mais ou puis-je trouver les autres informations sur le processus trac�.??

  2. #2
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    PTRACE_PEEKUSR, PTRACE_PEEKTEXT, etc.

  3. #3
    Membre confirm�
    Inscrit en
    D�cembre 2006
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 84
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <sys/errno.h>
    #include <sys/types.h>
    #include <iostream>
    #include <sys/ptrace.h>
    #include <unistd.h>
    #include <linux/user.h>
    #include </usr/include/signal.h>
    #include <csignal>
    using namespace std;
     
    int main ()
    {
        pid_t Child = fork ();
        long Ptr;
        const void * Addr = "Ox13";//j'ai mis la valeur au hazar
        if (Child == 0)
        {
            Ptr =  ptrace (PTRACE_TRACEME,0,NULL,NULL);
            signal (SIGSTOP,SIG_IGN);
            wait();
            cout << "ptrace : " << Ptr << '\n';
            execl("/bin/ls", "ls", NULL);
        }
        else
        {
            wait();
            Ptr =  ptrace (PTRACE_PEEKTEXT,Child, & Addr ,NULL);
            cout << "ptrace : " << Ptr << " - Addr : "<< Addr
                 << " - errno : " << errno<< " - what() : "
                 << strerror(errno) << '\n';
            ptrace(PTRACE_CONT, Child, NULL, NULL);
        }
        return 0;
    }
    bon j'ai voulu test� en ecrivant �a. quesque je fait et qui n'est pas bon??

  4. #4
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    const void * Addr = "Ox13";//j'ai mis la valeur au hazar
    C'est quoi ce truc horrible ?

    Et en quoi ton programme marche pas ?
    (A priori c'est plut�t Addr que &Addr...)

  5. #5
    Membre confirm�
    Inscrit en
    D�cembre 2006
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 84
    Par d�faut
    le troisieme argument de ptrace pointe sur une adresse memoire donc je lui ai mis une adresse en parametre avec une valeur au hazar ne sachant pas ce que je devait metre.

    comme resultat il me donne :

    ptrace : -1 - Addr : 0x8048b1c - errno : 3 - what() : No such process
    ptrace : 0

  6. #6
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Y'a m�me pas de wait sans param�tre d'apr�s le man.
    Et t'as pas test� si le fork s'est bien pass�.

  7. #7
    Membre confirm�
    Inscrit en
    D�cembre 2006
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 84
    Par d�faut
    bon d'accord je vais deja corriger �a. merci

  8. #8
    Membre confirm�
    Inscrit en
    D�cembre 2006
    Messages
    84
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2006
    Messages : 84
    Par d�faut
    super ca marche. j'ai verifier que fork() marcher et j'ai mis une valeur dans le wait().
    le nouveau code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    int main ()
    {
        pid_t Child = fork ();
        if (Child == -1)
        {
            cout << "fork () a echoue ...";
            return -1;
        }
        cout << "pid pere : " << getpid() << " PidFils : " << Child << '\n';
        long Ptr;
        int Status;
        const void * Addr = "Ox13";
        if (Child == 0)
        {
            Ptr =  ptrace (PTRACE_TRACEME,0,NULL,NULL);
            signal (SIGSTOP,SIG_IGN);
     
            cout << "ptrace : " << Ptr << '\n';
            execl("/bin/ls", "ls", NULL);
        }
        else
     {
            pid_t Attente = wait(& Status);
            cout << "Valeur de fin = " << Attente << '\n';
     
            Ptr =  ptrace (PTRACE_PEEKTEXT,Child, Addr ,NULL);
     
            cout << "ptrace : " << Ptr << " - Addr : "<< Addr
                 << " - errno : " << errno<< " - what() : "
                 << strerror(errno) << '\n';
     
            ptrace(PTRACE_CONT, Child, NULL, NULL);
        }
        return 0;
    }
    resultat apres modification :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    pid pere : 30379 PidFils : 0
    ptrace : 0
    pid pere : 30378 PidFils : 30379
    Valeur de fin = 30379
    ptrace : 1768316774 - Addr : 0x8048c79 - errno : 0 - what() : Success
    deux questions :
    1- que dois-je mettre � la place du truc horrible ?? const void * Addr = "Ox13";

    2- Dans le man il est �crit que Linux ne s�pare pas les espaces d'adressage de code et de donn�es. donc que dois-je comprendre en lisant :

    ptrace : 1768316774

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    R�ponses: 2
    Dernier message: 17/02/2004, 22h39
  2. [MFC] list box : comment �a marche
    Par runn2 dans le forum MFC
    R�ponses: 4
    Dernier message: 28/01/2004, 13h36
  3. [SYNEDIT] -> Comment �a marche ?
    Par MaTHieU_ dans le forum C++Builder
    R�ponses: 2
    Dernier message: 18/01/2004, 20h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    R�ponses: 7
    Dernier message: 05/08/2003, 01h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    R�ponses: 3
    Dernier message: 11/07/2003, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo