Comment coder un execve en appel système
alex6943
Messages postés
2
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour,
Je suis étudiant en informatique, et j'ai un projet à effectuer.
Je dois coder un appel système qui effectue un execve.
J'ai déjà penser à utiliser la fonction do_execve() mais elle prend en entrée un pt_reg que je ne sais pas initialiser.
De plus en cherchant un peu j'ai trouvé deux implémentations différentes, mais qui me donnent toutes deux un segmentation fault quand je lance l'appel système:
1 j'ai essayé de reprendre le code de sys_execve;
et
2 j'ai essayé un
mm_segment_t old_fs=get_fs();
set_fs();
do_execve("/bin/sh", argv, env, regs);
set_fs(old_fs);
J'ai besoin d'aide. Merci par avance à tous ceux qui liront et se pencheront sur mon problèmes!
Dites moi au moins si ça peut marcher!
Je suis étudiant en informatique, et j'ai un projet à effectuer.
Je dois coder un appel système qui effectue un execve.
J'ai déjà penser à utiliser la fonction do_execve() mais elle prend en entrée un pt_reg que je ne sais pas initialiser.
De plus en cherchant un peu j'ai trouvé deux implémentations différentes, mais qui me donnent toutes deux un segmentation fault quand je lance l'appel système:
1 j'ai essayé de reprendre le code de sys_execve;
et
2 j'ai essayé un
mm_segment_t old_fs=get_fs();
set_fs();
do_execve("/bin/sh", argv, env, regs);
set_fs(old_fs);
J'ai besoin d'aide. Merci par avance à tous ceux qui liront et se pencheront sur mon problèmes!
Dites moi au moins si ça peut marcher!
A voir également:
- Comment coder un execve en appel système
- Restauration systeme windows 10 - Guide
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Appel privé - Guide
- Le code ascii en informatique - Guide
2 réponses
Dans ton projet tu peux le coder en asm x86 ?
Si c'est le cas.
regarde quelque exemple sur ce site http://pollydevstorm.zapto.org/asm/index.html
Si c'est le cas.
regarde quelque exemple sur ce site http://pollydevstorm.zapto.org/asm/index.html
do_execve/sys_execve sont des fonctions du kernel. Tu n'es pas sensé pouvoir y accéder, à moins que tu sois en train de coder au niveau du noyau?
En fait quand tu appelles la fonction execve côté utilisateur, tu va basculer en mode kernel (interruption appel système) puis le kernel va executer sys_execve() qui va lui même appeller do_execve() etc....
Mais côté utilisateur, ce dont tu as besoin c'est d'execve(), par contre si tu es dans le noyau (Linux) et que tu veux executer un programme utilisateur alors il faut passer par d'autres solutions tel que khelper en utilisant la fonction
call_usermodehelper()
En fait quand tu appelles la fonction execve côté utilisateur, tu va basculer en mode kernel (interruption appel système) puis le kernel va executer sys_execve() qui va lui même appeller do_execve() etc....
Mais côté utilisateur, ce dont tu as besoin c'est d'execve(), par contre si tu es dans le noyau (Linux) et que tu veux executer un programme utilisateur alors il faut passer par d'autres solutions tel que khelper en utilisant la fonction
call_usermodehelper()
Et de manière générique, pour faire un appel système côté utilisateur, il y a la fonction syscall:
https://linux.die.net/man/2/syscall
https://linux.die.net/man/2/syscall
Ok, j'espère que tu utilises un noyau 2.6 parce que je ne sais pas si ça existe dans le 2.4 (comme ta config dit que tu as un 2.4).
Tu trouveras quelques détails sur cette fonction dans le repertoire des sources du noyau:
include/linux/kmod.h
Et l'idéal est de faire un grep pour trouver des fichiers qui l'utilisent.
Tu trouveras quelques détails sur cette fonction dans le repertoire des sources du noyau:
include/linux/kmod.h
Et l'idéal est de faire un grep pour trouver des fichiers qui l'utilisent.