web-dev-qa-db-fra.com

Chiffres magiques de l'appel système Linux reboot ()

L'interface de programmation Linux a un exercice dans le chapitre 3 qui va comme ceci:

Lorsque vous utilisez l'appel système reboot () spécifique à Linux pour redémarrer le système, le deuxième argument, magic2, doit être spécifié comme l'un d'un ensemble de nombres magiques (par exemple, LINUX_REBOOT_MAGIC2). Quelle est la signification de ces chiffres? (Les convertir en hexadécimal fournit un indice.)

La page de manuel nous indique que magic2 Peut être l'un de LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) ou LINUX_REBOOT_MAGIC2C (537993216). J'ai échoué à déchiffrer leur signification en hexadécimal. J'ai également regardé /usr/include/linux/reboot.h, Qui n'a pas non plus donné de commentaire utile.

J'ai ensuite recherché dans le code source du noyau la définition de sys_reboot. Tout ce que j'ai trouvé était une déclaration dans un fichier d'en-tête.

Par conséquent, ma première question est, quelle est la signification de ces chiffres? Ma deuxième question est, où est la définition de sys_reboot, Et comment l'avez-vous trouvée?

[~ # ~] modifier [~ # ~] : J'ai trouvé la définition dans kernel/sys.c. J'ai seulement recherché sys_reboot, Et j'ai oublié de rechercher les numéros MAGIC. J'ai pensé que la définition devait être cachée derrière une macro, donc j'ai regardé le fichier System.map Sous /boot Et je l'ai trouvé à côté de ctrl_alt_del. J'ai alors recherché ce symbole, ce qui m'a conduit au bon fichier. Si j'avais compilé le noyau à partir du code source, je pourrais essayer de trouver quel fichier objet définissait le symbole et partir de là.

71
Wei Hu

Juste une supposition, mais ces chiffres semblent plus intéressants en hexadécimal:

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

Anniversaires d'enfants de développeurs ou de développeurs?

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

82
araqnid

C'est l'anniversaire de Linus Torvalds (le développeur du noyau Linux et du contrôle de version Git) et de ses 3 filles. fonctionne comme des nombres magiques pour redémarrer le système.

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

22
Ritwik Dey