Найдите символ __proc_info в проекте XNU

Я хотел бы выяснить, как работает процесс VMMAP.

После запуска этого исполняемого файла с помощью dtrace кажется, что метод proc_regionfilename извлекает адресное пространство каждого раздела в виртуальной памяти.

Итак, я вырыл немного глубже, и нашел его реализацию в xnu под файлом
libsyscall/ упаковщики /libproc/libproc.c

В теле функции я вижу, что основной вызов - proc_pidinfo:

retval = proc_pidinfo(pid, PROC_PIDREGIONPATHINFO, (uint64_t)address, &reginfo, 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

Другие вопросы по тегам