The Linux Programming Interface在第三章有一个练习是这样的:

使用Linux特定的重新启动()时

手册页告诉我们,magic2可以是LINUX_REBOOT_MAGIC2(672274793)、LINUX_REBOOT_MAGIC2A(85072278)、LINUX_REBOOT_MAGIC2B(369367448)或LINUX_REBOOT_MAGIC2C(537993216)中的一种.我没能用十六进制解释它们的意思.我还看了/usr/include/linux/reboot.h,它也没有给出任何有用的 comments .

然后我在内核的源代码中搜索sys_reboot的定义.我只在头文件中找到了一个声明.

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

EDIT:我在kernel/sys.c年找到了这个定义.我只打了sys_reboot分,忘了打魔法数字.我想这个定义一定隐藏在一些宏技巧后面,所以我查看了/boot下的System.map文件,发现它在ctrl_alt_del旁边.然后我搜索那个符号,找到了正确的文件.如果我从源代码编译内核,我可以try 找到定义符号的对象文件,然后从那里开始.

推荐答案

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

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

开发者还是开发者子元素的生日?

关于查找syscall实现,我做了git grep -n LINUX_REBOOT_MAGIC2次测试,在kernel/sys中找到了定义.c、 我猜符号sys_reboot是由SYSCALL_DEFINE4(reboot, ...个古宾语生成的.

Linux相关问答推荐

如何注释掉SLURM中的延迟调度命令?

c++进程状态中的+是什么意思

Ubuntu 20 不支持 MAP_FIXED_NOREPLACE

从 bash shell 等效项在fish shell 上设置 $ANDROID_SDK_ROOT

对一个命令使用不同的 PHP 版本 CLI 可执行文件

DMA 和内存映射 IO 有什么区别?

CHMOD 755 与 750 权限集之间的差异

有没有办法在整个项目代码中的某个日期之后找出更改的文件?

将 $_GET 参数传递给 cron 作业(job)

在亚马逊 ec2 linux 微型实例上的 virtualenv 中安装 scipy 时遇到问题

如何分析内存使用情况?

从文本文件中删除奇数行或偶数行

如何仅打印 hexdump 中的十六进制值,而不打印行号或 ASCII 表?

GNU Octave 方法对矩阵中的每个项目进行操作.octave arrayfun(...)示例

如何在 Linux 中删除早于特定日期的文件?

Linux:用户名不在 sudoers 文件中

初学者如何在 Linux 中开始使用 Mono?

如何使用 sed 通过灵活的键和值更改我的配置文件?

适用于 Windows、Linux、MacOS X 的跨平台脚​​本

Linux 目录列表中只有问号