【发布时间】:2011-06-16 01:50:23
【问题描述】:
The Linux Programming Interface 在第 3 章中有一个练习,如下所示:
使用 Linux 特定的 reboot() 时 系统调用来重新启动系统, 第二个参数,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 中找到了定义。我只 grep 了 sys_reboot,忘记了 grep 的 MAGIC 数字。我认为定义必须隐藏在一些宏技巧后面,所以我查看了/boot 下的System.map 文件,发现它在ctrl_alt_del 旁边。然后我用 grep 寻找那个符号,这让我找到了正确的文件。如果我从源代码编译内核,我可以尝试查找定义符号的目标文件,然后从那里开始。
【问题讨论】:
标签: linux linux-kernel system-calls