2016-02-22 2 views
7

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, &reginfo, 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

Répondre

1

proc_info est un syscall, il est donc la mise en œuvre est dans le noyau. Le code source de la version trouvée dans 10.11.2 se trouve ici:

http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c

+0

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

+0

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