Магические числа системного вызова Linux reboot () - PullRequest
61 голосов
/ 26 января 2011

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

Ответы [ 2 ]

81 голосов
/ 26 января 2011

Просто предположение, но эти цифры выглядят интереснее в гексах:

672274793 = 0x28121969
 85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000

Дни рождения разработчиков или разработчиков?

Что касается поиска реализации syscall, я сделал git grep -n LINUX_REBOOT_MAGIC2 и нашел определение в kernel / sys.c. Я подозреваю, что символ sys_reboot генерируется SYSCALL_DEFINE4(reboot, ... Губбинсом.

21 голосов
/ 21 января 2013

Это день рождения Линуса Торвальдса (разработчика ядра Linux и системы контроля версий Git) и его трех дочерей.работает как магические числа для перезагрузки системы.

http://en.wikipedia.org/wiki/Linus_Torvalds

...