comment l'argument envp est-il passé pour exécuter l'appel système?


3

Supposons que j'appelle

int execve(const char *filename, char *const argv[], char *const envp[])

Où ai-je mallocédité la mémoire pour envp, alors comment le programme filenameaccède-t-il au contenu de ce tableau lorsqu'il execveefface toute la mémoire précédente (y compris le tas)?


La réponse la plus évidente serait que execvecopie argv [] et envp [] dans un autre domaine (éventuellement la mémoire du noyau) avant de supprimer le reste, n'est-ce pas?
Grawity

2
Il n'y a pas de grand mystère ici; le noyau copie et conserve les deux argvet envpquelque part, puis les rend disponibles pour la nouvelle image de processus. Il s’agit là d’un détail d’implémentation, ce qui ne devrait pas vous intéresser, à moins que vous ne fassiez quelque chose de profond et de magique, ou de piratage du noyau.
Tom Hunt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.