process.c :
Enfin la fonction execve qui permet de remplacer l'exécution du thread kernel par le lancement d'un programme est présentée succinctement ci-dessous. Le code de cette fonction a été trouvé sur internet (Alan Cox en est l'auteur), puis modifié par nos soins, car nous aurions été incapable de trouver le bout d'assembleur seul.
int execve(char __user *filename, char **argv, char **envp) { int error; struct pt_regs regs; memset(®s, 0, sizeof (regs)); regs.eflags = X86_EFLAGS_IF; error = do_execve(filename, (char __user * __user *) argv, (char __user * __user *) envp, ®s); if (error == 0) { current->ptrace &= ~PT_DTRACE; __asm__ __volatile__( "movl %0,%%esp\n\t" "movl %1,%%ebp\n\t" "jmp resume_userspace\n\t" : : "r" (®s), "r" (current_thread_info())); } return error; }