Mi piacerebbe capire come funziona il processo VMMAP.Individuare il simbolo __proc_info nel progetto XNU
Dopo aver eseguito questo file eseguibile con dtrace, sembra che il metodo proc_regionfilename che estrae lo spazio di indirizzi di ogni sezione nella memoria virtuale.
Così, ho scavato un po 'più profonda, e ha trovato la sua attuazione in XNU sotto il file
libsyscall/involucri/libproc/libproc.c
Nel corpo della funzione vedo che la chiamata principale è quello di proc_pidinfo:
retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, ®info, sizeof(struct proc_regionwithpathinfo));
E proc_pidinfo che chiede a sua volta a __proc_info simbolo:
int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize);
Tuttavia, questo simbolo c annot si trova nel codice, e mi chiedo come è stato creato durante la pre-compilazione, compilazione, link o in tempo reale.
Qualche idea su dove trovarlo, o come viene creato (non ho ancora provato a compilare il kernel).
grazie
Grazie, ma perché lo fa dichiarazione libproc.c è realizzato in forma maciullato (__proc_info invece di proc_info)? – Zohar81
Penso che "__proc_info' sia lo shif di syscall che trasforma la normale convenzione di chiamata di funzioni in convenzione di syscall e in effetti causa la trap allo spazio del kernel. Questi vengono generati automaticamente dalla tabella syscall del kernel, quindi non troverete alcun codice sorgente diretto per loro. Non sicuro al 100%. – pmdj