Comment coder un execve en appel système

alex6943 Messages postés 2 Statut Membre -  
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!

2 réponses

0x0syscall Messages postés 94 Statut Membre 5
 
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
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
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()
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
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
0
alex6943 Messages postés 2 Statut Membre > kilian Messages postés 8854 Statut Modérateur
 
Merci, c'était call_usermodehelper qu'il me fallait.
Le but du jeu était d'implémenter un system call (au niveau du noyau), qui lançait un executable côté utilisareur.
0
kilian Messages postés 8854 Statut Modérateur 1 526 > alex6943 Messages postés 2 Statut Membre
 
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.
0