Bonjour,
j'essaye de tracer un processus à l'aide de ptrace(). Comme j'exécute manuellement le processus tracé, je fork et j'attends que le processus fils appelle execve() et repasse la main. Ensuite dans le traceur (le processus parent) j'appelle ptrace() avec la requête PT_READ_I, seulement je ne sais pas trop quoi passer comme 3ème paramètre de la fonction (caddr_t addr)... d'apres le man, c'est l'adresse à laquelle on désire lire un entier dans le tracé, alors je rajoute
Code : Sélectionner tout - Visualiser dans une fenêtre à part
r_addr = mmap(0, 42, PROT_READ, MAP_PRIVATE | MAP_INHERIT, fd, 0);
avant de forker (fd étant le descripteur ouvert du binaire à tracer).

Je passe cette addresse en paramètre à ptrace(), mais celui-ci échoue. Voilà l'appel que j'effectue:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
              errno = 0;
              if (ptrace(PT_READ_I, pid, r_addr, 0) == -1 && errno != 0)
                fail("[parent] PT_READ_I failed");
pid étant l'adresse du tracé.
J'ai peut-être pris une mauvaise piste avec mmap()... quelqu'un pourrait m'aider? Merci d'avance