Интерфейс программирования 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
. Затем я нашел этот символ, который привел меня к нужному файлу. Если бы я скомпилировал ядро из исходного кода, я мог бы попытаться найти, какой объектный файл определил символ, и перейти оттуда.