Найдите символ __proc_info в проекте XNU
Я хотел бы выяснить, как работает процесс VMMAP.
После запуска этого исполняемого файла с помощью dtrace кажется, что метод proc_regionfilename извлекает адресное пространство каждого раздела в виртуальной памяти.
Итак, я вырыл немного глубже, и нашел его реализацию в xnu под файлом
libsyscall/ упаковщики /libproc/libproc.c
В теле функции я вижу, что основной вызов - proc_pidinfo:
retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, ®info, sizeof(struct proc_regionwithpathinfo));
И proc_pidinfo, которая в свою очередь вызывает символ __proc_info:
int __proc_info(int callnum, int pid, int flavor, uint64_t arg, void * buffer, int buffersize);
Тем не менее, этот символ не может быть найден в коде, и мне интересно, как он создается во время предварительной компиляции, компиляции, ссылки или в реальном времени.
Любая идея, где я могу найти его, или как он создается (я еще не пытался скомпилировать ядро).
Спасибо
1 ответ
proc_info
это системный вызов, поэтому его реализация находится в ядре. Исходный код для версии, найденной в 10.11.2, можно найти здесь:
http://opensource.apple.com/source/xnu/xnu-3248.20.55/bsd/kern/proc_info.c