Магические номера системного вызова reboot() Linux
Интерфейс программирования Linux имеет упражнение в главе 3, которое выглядит следующим образом:
При использовании Linux-специфичной перезагрузки() системный вызов для перезагрузки системы, Второй аргумент magic2 должен быть как один из множества магии номера (например, LINUX_REBOOT_MAGIC2). Каково значение этих номера? (Преобразование их в hexadecimal предоставляет ключ.)
На странице руководства нам сообщается, что magic2
может быть одним из LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) или LINUX_REBOOT_MAGIC2C (537993216). Я не смог расшифровать их значение в шестнадцатеричном формате. Я также посмотрел на /usr/include/linux/reboot.h
, который также не дал никакого полезного комментария.
Затем я искал в исходном коде ядра для определения sys_reboot
. Все, что я нашел, было объявлением в файле заголовка.
Поэтому мой первый вопрос: каково значение этих чисел? Мой второй вопрос: где sys_reboot
определение и как вы его нашли?
EDIT. Я нашел определение в kernel/sys.c
. Я только скорчил для sys_reboot
и забыл grep для чисел MAGIC. Я решил, что определение должно быть скрыто за каким-то макро-трюком, поэтому я просмотрел файл System.map
в /boot
и нашел его рядом с ctrl_alt_del
. Затем я перебрал этот символ, который привел меня к правильному файлу. Если бы я скомпилировал ядро из исходного кода, я мог бы попытаться найти, какой файл объекта определил символ, и оттуда.
Ответы
Ответ 1
Просто догадайтесь, но эти цифры выглядят более интересными в hex:
672274793 = 0x28121969
85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000
Дни рождения детей разработчиков или разработчиков?
Что касается поиска реализации syscall, я сделал git grep -n LINUX_REBOOT_MAGIC2
и нашел определение в kernel/sys.c. Я полагаю, символ sys_reboot
генерируется SYSCALL_DEFINE4(reboot, ...
gubbins.
Ответ 2
Это день рождения Линуса Торвальдса (разработчика ядра Linux и управления версией Git) и его трех дочерей. работает как магические номера для перезагрузки системы.
http://en.wikipedia.org/wiki/Linus_Torvalds