linux - llamadas - llamada al sistema exec
Números mágicos de la llamada al sistema de reinicio de Linux() (2)
Es el cumpleaños de Linus Torvalds (el desarrollador del kernel de Linux y el control de la versión de Git) y sus 3 hijas. funciona como números mágicos para reiniciar el sistema.
La Interfaz de Programación de Linux tiene un ejercicio en el Capítulo 3 que dice así:
Al usar la llamada al sistema de reinicio () específica de Linux para reiniciar el sistema, el segundo argumento, magic2, debe especificarse como uno de un conjunto de números mágicos (por ejemplo, LINUX_REBOOT_MAGIC2). ¿Cuál es el significado de estos números? (Convertirlos a hexadecimal proporciona una pista).
La página man nos dice que magic2
puede ser LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) o LINUX_REBOOT_MAGIC2C (537993216). No logré descifrar su significado en hexadecimal. También miré /usr/include/linux/reboot.h
, que tampoco dio ningún comentario útil.
Luego busqué en el código fuente del kernel la definición de sys_reboot
. Todo lo que encontré fue una declaración en un archivo de encabezado.
Por lo tanto, mi primera pregunta es, ¿cuál es el significado de estos números? Mi segunda pregunta es, ¿dónde está la sys_reboot
de sys_reboot
, y cómo la encontraste?
EDIT : encontré la definición en kernel/sys.c
Solo agarré para sys_reboot
, y olvidé grep para los números MAGIC. Pensé que la definición debe estar oculta detrás de algún macro truco, así que miré el archivo System.map
en /boot
, y lo encontré junto a ctrl_alt_del
. Luego grepped para ese símbolo, lo que me llevó al archivo correcto. Si hubiera compilado el kernel desde el código fuente, podría tratar de encontrar qué archivo de objeto definió el símbolo e ir desde allí.
Solo una conjetura, pero esos números parecen más interesantes en hex:
672274793 = 0x28121969
85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000
Cumpleaños de los niños de desarrolladores o desarrolladores?
En cuanto a encontrar la implementación de syscall, hice un git grep -n LINUX_REBOOT_MAGIC2
y encontré la definición en kernel / sys.c. El símbolo sys_reboot
es generado por SYSCALL_DEFINE4(reboot, ...
gubbins, sospecho).