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 rajouteavant de forker (fd étant le descripteur ouvert du binaire à tracer).
Code : Sélectionner tout - Visualiser dans une fenêtre à part r_addr = mmap(0, 42, PROT_READ, MAP_PRIVATE | MAP_INHERIT, fd, 0);
Je passe cette addresse en paramètre à ptrace(), mais celui-ci échoue. Voilà l'appel que j'effectue:
pid étant l'adresse du tracé.
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");
J'ai peut-être pris une mauvaise piste avec mmap()... quelqu'un pourrait m'aider? Merci d'avance![]()
Partager