Bonjour à toutes et à tous ! En espérant que vous passez de bonnes fêtes... !
Pour ma part, cela fait maintenant 4 jours que je galère à utiliser les binaires du shell.
J'ai fait un interpréteur de commandes, et, si je tape "ls" ou "pwd", on est sensé voir leur exécution à l'écran.
Je me suis donc appliqué à rechercher le PATH= contenant les chemins vers les binaires correspondant. Une fois trouvé, j'ai découpé chaque binaire dans un char** à partir de leur ":"
j'obtenais donc des trucs du style "/usr/bin". J'ai ensuite rajouté un '/' à la fin de chaque ligne du tableau afin de n'avoir plus qu'à mettre avec un strcat la commande souhaité. Après avoir faire la fonction de découpe, j'ai donc fait la commande pour mettre la commande :
que je vous explique rapidement : au début, après avoir fait les découpes et m'assurer que j'entrais bien dans le 1er if, j'ai essayé d'executer execve en dur (on me l'a conseillé), tout marche nickel. Entre temps, mon strcat qui était en dehors du if a cessé de fonctionner, impossible de ré entrer dans le if. je sais pas pourquoi, il a fallu que je remette le my_strcat à l'endroit où vous le voyez.
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 int cmd(char **av, char **envp, char *str) { int i; char **path; char *toto[4]; // = { "/bin/ls", "-l" ,"--color", NULL}; char *cmd; // = strdup("/bin/ls"); path = binar(av, envp, str); i = 0; while (path[i]) { toto[0] = path[i]; toto[1] = NULL; if (access(path[i], F_OK) == 0) { my_strcat(path[i], str); cmd = strdup("/bin/pwd"); if ((execve(cmd, toto, NULL)) == -1) write(2, "Erreur d'execve\n", my_strlen("Erreur d'execve\n")); } i++; } }
Bref, à partir de là j'ai essayé de bidouiller (je suis débutant en prog, tout n'est pas encore très claire dans ce que je fais :p ) afin d'avoir l'argument entré qui déclenche le binaire souhaité !
Dans le char ** toto, quand je remplace les " { } " du début par mon path, nickel, ca fonctionne, mais quand il faut utiliser CMD... SI je le remplace par path[i] mon execve tend constamment vers -1.
Je vais être franc avec vous, je mise beaucoup sur ce projet, et là je craque complètement, en 5 jours j'ai fais des pas de fourmis.
Si quelqu'un peut m'aider, je lui en serrais reconnaissant !
Merci d'avance
edit : je ne sais pas pourquoi c'est caché, mais en dessous de *toto[4], il y a normalement :
char *cmd; // = strdup("/bin/ls");
Partager