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à.
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.
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.