Магические числа системного вызова Linux reboot ()

Интерфейс программирования Linux содержит упражнение в главе 3, которое выглядит следующим образом:

При использовании специфичного для Linux системного вызова reboot () для перезагрузки система, второй аргумент, magic2, должен быть определен как один из набора магических чисел (например, LINUX_REBOOT_MAGIC2). Какое значение имеет значение из этих номеров? (Преобразование их в шестнадцатеричный формат дает ключ к разгадке.)

На странице руководства сказано, что magic2 может быть одним из LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT), LINUX_REBOOT) или LINUX_REBOOT. LINUX_REBOOT_MAGIC2C (537993216). Мне не удалось расшифровать их значение в шестнадцатеричном виде. Я также просмотрел /usr/include/linux/reboot.h , который также не дал никаких полезных комментариев.

Затем я поискал в исходном коде ядра определение sys_reboot . Все, что я нашел, это объявление в заголовочном файле.

Поэтому мой первый вопрос: каково значение этих чисел? Мой второй вопрос: где определение sys_reboot и как вы его нашли?

РЕДАКТИРОВАТЬ : Я нашел определение в kernel / sys.c . Я только grep для sys_reboot , и забыл grep для номеров MAGIC. Я решил, что определение должно быть скрыто за каким-то трюком с макросами, поэтому я посмотрел на систему .файл map в папке / boot и находится рядом с ctrl_alt_del . Затем я нашел этот символ, который привел меня к нужному файлу. Если бы я скомпилировал ядро ​​из исходного кода, я мог бы попытаться найти, какой объектный файл определил символ, и перейти оттуда.

66
задан Wei Hu 26 January 2011 в 19:22
поделиться