next up previous contents
suivant: La conservation des liens monter: La résolution des liens précédent: fs/   Table des matières

arch/i386/kernel/


$\bullet$ 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(&regs, 0, sizeof (regs));
  regs.eflags = X86_EFLAGS_IF;

  error = do_execve(filename,
                    (char __user * __user *) argv,
                    (char __user * __user *) envp,
                    &regs);
  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" (&regs), "r" (current_thread_info()));
  }
  return error;
}


next up previous contents
suivant: La conservation des liens monter: La résolution des liens précédent: fs/   Table des matières