Перейти к содержимому

Магические числа в коде Linux

    При использовании специфического для Linux системного вызова reboot() для перезагрузки системы второй аргумент, magic2, должен быть указан как один из набора магических чисел. Если мы посмотрим исходный код kernel/reboot.c

    /* We only trust the superuser with rebooting the system. */
    	if (!capable(CAP_SYS_BOOT))
    		return -EPERM;
    
    	/* For safety, we require "magic" arguments. */
    	if (magic1 != LINUX_REBOOT_MAGIC1 ||
    	    (magic2 != LINUX_REBOOT_MAGIC2 &&
    	     magic2 != LINUX_REBOOT_MAGIC2A &&
    	     magic2 != LINUX_REBOOT_MAGIC2B &&
    	     magic2 != LINUX_REBOOT_MAGIC2C))
    	return -EINVAL;

    Мы видим, что magic1 и imagic2 присваиваются переменные магического числа LINUX_REBOOT_MAGIC1, INUX_REBOOT_MAGIC2, LINUX_REBOOT_MAGIC2A, LINUX_REBOOT_MAGIC2B, LINUX_REBOOT_MAGIC2C. Их значения храняться в файле reboot.h

    /*
     * Magic values required to use _reboot() system call.
     */
    
    #define	LINUX_REBOOT_MAGIC1	0xfee1dead
    #define	LINUX_REBOOT_MAGIC2	672274793
    #define	LINUX_REBOOT_MAGIC2A	85072278
    #define	LINUX_REBOOT_MAGIC2B	369367448
    #define	LINUX_REBOOT_MAGIC2C	537993216

    Не находите немного необычной переменную LINUX_REBOOT_MAGIC1 которая определяется как 0xfee1dead, если перевести ее с английского дословно, то мы получим «чувствовать себя мертвым». Именно эта переменная отвечает за перезагрузку системы.

    В остальных 4х переменных зашифрованы все самые важные даты для Линуса Торвальдса

    LINUX_REBOOT_MAGIC2

    В переменной LINUX_REBOOT_MAGIC2 со значением 672274793 зашифрован день рождения Линуса Торвальдса.

    printf "%x\n" 672274793

    В выводе команды мы получим 28 12 1969

    LINUX_REBOOT_MAGIC2A

    В переменной LINUX_REBOOT_MAGIC2A со значением 85072278 зашифрован день рождение дочери Линуса Патрисия Миранда.

    printf "%x\n" 85072278

    В выводе команды мы получим 5 12 1996

    LINUX_REBOOT_MAGIC2B

    В переменной LINUX_REBOOT_MAGIC2B со значением 369367448 зашифрована дата рождения второй дочери Линуса Даниел Юланда

    printf "%x\n" 369367448

    В выводе команды мы получим 16 04 1998

    LINUX_REBOOT_MAGIC2C

    В последней переменной LINUX_REBOOT_MAGIC2C со значением 537993216 зашифрована дата рождения третей дочери Линуса Целесты Аманда

    printf "%x\n" 537993216

    Мы получим вывод 20 11 2000