Список и документация для системных вызовов для ядра XNU в OSX

Я пытаюсь выяснить, как получить список и документацию для системных вызовов, доступных в ядре XNU в OSX. Я довольно много искал, но не смог найти ничего полезного. Насколько я понимаю, соглашения о вызовах соответствуют BSD, это правильно?

Спасибо

Ответы

Ответ 1

"Официальный" список находится на странице Darwin в Apple. В частности, см. Файл syscalls.master в дистрибутиве XNU. (Если что-то, чего вы ожидаете, отсутствует, попробуйте новую версию XNU.)

Часть BSD системных вызовов поступает от BSD, но есть частые вызовы, которые следуют совершенно другим соглашениям.

Вы обязательно захотите прочитать книгу ядра Amit Singh OS X, см. веб-сайт книги. Он был перезаписан для 10.4 и в основном для PPC, но по-прежнему является самой большой подробной информацией, которую вы можете получить в ядре.

Ответ 2

Системные вызовы XNU, действительно, следуют модели BSD/POSIX, но являются подмножеством. Существует немало дополнительных вызовов, принадлежащих Apple, например, stack_snapshot (# 365), iopolicy (322), proc_info (336 ) и другие. Apple хранит те недокументированные, но вы можете найти их источник в XNU. Вы можете явно вызывать недокументированные системные вызовы (используя макрос вызова sys и указывая вызов # как первый аргумент), но некоторые (например, proc_info) завернуты библиотеками Darwin (например, libproc, который является частью libSystem)

syscalls.master создает файл /usr/include/sys/syscall.h, который также даст вам имена системных вызовов (но не прототипы). Книга Сингха описывает некоторые вызовы sys, но значительно устарела, поскольку у Tiger было меньше 439 (в iOS6: 443), которые XNU имеет сегодня. Более позднюю книгу можно найти в http://www.amazon.com/Mac-OS-iOS-Internals-Apples/dp/1118057651 и ее приложение фактически подробно документирует все системные вызовы (и Маховые ловушки).