Je voudrais savoir comment fonctionne le processus VMMAP. Après l'exécution de cet exécutable avec dtrace, il semble que la méthode proc_regionfilename extrait l'espace d'adressage de chaque section dans la mémoire virtuelle.Repérer le symbole __proc_info dans le projet XNU
Alors, je creusais un peu plus, et a trouvé sa mise en œuvre dans XNU sous le fichier
libsyscall/emballages/libproc/libproc.c
Dans le corps de la fonction, je vois que l'appel principal est de proc_pidinfo:
retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, ®info, sizeof(struct proc_regionwithpathinfo));
Et proc_pidinfo qui appelle à son tour à __proc_info symbole:
int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize);
Cependant, ce symbole c annot peut être trouvé dans le code, et je me demande comment il a été créé pendant la pré-compilation, la compilation, le lien ou le temps réel.
Toute idée où puis-je la trouver, ou comment est-elle créée (je n'ai pas encore essayé de compiler le noyau).
grâce
Merci, mais pourquoi est-il dans la déclaration libproc.c est faite sous la forme mutilée (__proc_info au lieu de proc_info)? – Zohar81
Je pense que '__proc_info' est le shim syscall qui transforme la convention d'appel de fonction normale en convention syscall et provoque en fait l'interception de l'espace du noyau. Ceux-ci sont générés automatiquement à partir de la table syscall du noyau, donc vous ne trouverez aucun code source direct pour eux. Pas 100% sûr cependant. – pmdj