2011-01-26 2 views
52

The Linux Programming Interface имеет упражнение в главе 3, которая идет как это:магических чисел в Linux перезагрузки() системного вызова

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

страница человек говорит нам 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. Я только grepped для sys_reboot, и забыл grep для чисел MAGIC. Я решил, что определение должно быть скрыто за каким-то макро-трюком, поэтому я посмотрел файл System.map под номером /boot и нашел его рядом с ctrl_alt_del. Затем я перебрал этот символ, который привел меня к правильному файлу. Если бы я скомпилировал ядро ​​из исходного кода, я мог бы попытаться найти, какой файл объекта определил символ, и оттуда оттуда.

ответ

71

Просто догадка, но эти цифры выглядят более интересны в шестнадцатеричном:

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

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

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

+4

+1 только для даты;) – BlackBear

+0

Это должно быть! Я должен был выровнять цифры! –

+24

28 декабря 1969 года - дата рождения Линуса Торвальдса [Википедия]. Другие, кажется, даты рождения его детей, хотя я могу только подтвердить, что он родился в декабре 1996 года [случайный гуглинг]. –

18

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

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

Смежные вопросы