Linux reboot()系统调用的幻数

Wei*_* Hu 67 linux system-calls linux-kernel

Linux编程接口在第3章中有一个练习,如下所示:

当使用Linux特有重新启动()系统调用来重新启动系统,第二个参数,magic2,必须被指定为一组幻数(例如,LINUX_REBOOT_MAGIC2)中的一个.这些数字有什么意义?(将它们转换为十六进制提供了线索.)

该手册页告诉我们magic2可以LINUX_REBOOT_MAGIC2(672274793),LINUX_REBOOT_MAGIC2A(85072278),LINUX_REBOOT_MAGIC2B(369367448),或LINUX_REBOOT_MAGIC2C(537993216)之一.我没能用十六进制解读它们的含义.我也看了一下/usr/include/linux/reboot.h,也没有给出任何有用的评论.

然后我在内核的源代码中搜索了它sys_reboot的定义.我发现的只是头文件中的声明.

因此,我的第一个问题是,这些数字有什么意义?我的第二个问题是,在哪里sys_reboot定义,你是如何找到它的?

编辑:我在中找到了定义kernel/sys.c.我只是贪图sys_reboot,忘了grep的MAGIC数字.我认为定义必须隐藏在一些宏技巧背后,所以我查看了下面的System.map文件/boot,并在旁边找到它ctrl_alt_del.然后我抓住那个符号,这导致我找到了正确的文件.如果我从源代码编译内核,我可以尝试找到定义符号的对象文件,并从那里开始.

ara*_*nid 85

只是一个猜测,但这些数字在十六进制中看起来更有趣:

672274793 = 0x28121969
 85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000
Run Code Online (Sandbox Code Playgroud)

开发人员或开发人员的孩子的生日?

关于查找syscall实现,我做了一个git grep -n LINUX_REBOOT_MAGIC2并在kernel/sys.c中找到了定义.我怀疑这个符号sys_reboot是由SYSCALL_DEFINE4(reboot, ...gubbins 产生的.

  • 1969年12月28日是Linus Torvalds的出生日期[维基百科].其他人似乎是他孩子的出生日期,但我只能确认一个人出生于1996年12月[随机谷歌搜索]. (28认同)
  • 确认,他们是莱纳斯和他的3个女儿的出生日期. - > http://www.nndb.com/people/444/000022378/ (25认同)
  • 但我的问题是:为什么这个系统调用需要魔法?我的猜测是避免在意外和无意的调用后重新启动。即:系统调用在继续之前要做的第一件事是验证所需的魔法是否存在...... (2认同)

Rit*_*Dey 23

这是Linus Torvalds(Linux内核的开发者和Git版本控件)及其3个女儿的生日.作为魔术数字重新启动系统.

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