70 votes

Numéros magiques de l'appel système reboot () de Linux

Linux, l'Interface de Programmation est un exercice dans le Chapitre 3, qui va comme ceci:

Lors de l'utilisation de l', spécifique à Linux, reboot() l'appel système pour redémarrer le système, l' deuxième argument, magic2, doit être spécifié en tant que partie d'un ensemble de magie les chiffres (p. ex., LINUX_REBOOT_MAGIC2). Quelle est la signification de ces les chiffres? (Les convertir en hexadécimal fournit un indice.)

La page de manuel nous dit magic2 peut être l'un des LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448), ou LINUX_REBOOT_MAGIC2C (537993216). Je n'ai pas réussi à déchiffrer leur signification dans l'hex. J'ai également regardé /usr/include/linux/reboot.h, ce qui n'a pas de commentaire non plus.

J'ai alors cherché dans le code source du noyau pour sys_reboots'définition. Tout ce que je trouve, c'est une déclaration dans un fichier d'en-tête.

Donc, ma première question est, quelle est la signification de ces nombres? Ma deuxième question est, où est - sys_reboots'définition, et comment avez-vous trouver?

EDIT: j'ai trouvé la définition de l' kernel/sys.c. Je ne grepped pour sys_reboot, et j'ai oublié de grep pour les numéros de MAGIE. J'ai pensé que la définition doit être caché derrière quelques macro truc, alors j'ai regardé l' System.map fichier /boot, et l'a trouvé à côté de ctrl_alt_del. J'ai ensuite grepped pour ce symbole, qui m'a conduit vers le fichier correct. Si j'avais compilé le noyau à partir du code source, je pourrais essayer de trouver quel fichier de l'objet défini le symbole, et à partir de là.

90voto

araqnid Points 33350

Juste une supposition, mais ces chiffres semblent plus intéressants dans l'hex:

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

Les anniversaires d'enfants de développeurs ou de développeurs?

En ce qui concerne la recherche de l'implémentation syscall, j'ai effectué un git grep -n LINUX_REBOOT_MAGIC2 et trouvé la définition dans kernel / sys.c. Le symbole sys_reboot est généré par les SYSCALL_DEFINE4(reboot, ... gubbins, je suppose.

22voto

Ritwik Dey Points 178

C'est l'anniversaire de Linus Torvald (le développeur du noyau Linux et du contrôle de version GIT) et de ses 3 filles. fonctionne comme un nombre magique pour redémarrer le système.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X