Интерфейс программирования Linux содержит упражнение в главе 3, которое выглядит следующим образом:
При использовании специфичной для Linux перезагрузки ()
системный вызов для перезагрузки системы,
Второй аргумент, magic2, должен быть
указан как один из набора магии
номера (например, LINUX_REBOOT_MAGIC2).
Каково значение этих
номера? (Преобразование их в
шестнадцатеричный дает ключ.)
Справочная страница сообщает нам, что magic2
может быть одним из LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) или LINUX_REBOOT_MAGIC216) (537). Я не смог расшифровать их значение в гексе. Я также посмотрел на /usr/include/linux/reboot.h
, который также не дал никакого полезного комментария.
Затем я искал в исходном коде ядра определение sys_reboot
. Все, что я нашел, было объявлением в заголовочном файле.
Поэтому, мой первый вопрос, каково значение этих чисел? Мой второй вопрос: где определение sys_reboot
и как вы его нашли?
РЕДАКТИРОВАТЬ : я нашел определение в kernel/sys.c
. Я только набрал sys_reboot
и забыл набрать ВОЛШЕБНЫЕ числа. Я подумал, что определение должно быть скрыто за каким-то макро-трюком, поэтому я посмотрел на файл System.map
в /boot
и нашел его рядом с ctrl_alt_del
. Затем я нашел этот символ, что привело меня к правильному файлу. Если бы я скомпилировал ядро из исходного кода, я мог бы попытаться найти, какой объектный файл определил символ, и перейти оттуда.