gpt4 book ai didi

linux - Linux reboot() 系统调用的魔数(Magic Number)

转载 作者:IT老高 更新时间:2023-10-28 12:30:47 25 4
gpt4 key购买 nike

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

When using the Linux-specific reboot() system call to reboot the system, the second argument, magic2, must be specified as one of a set of magic numbers (e.g., LINUX_REBOOT_MAGIC2). What is the significance of these numbers? (Converting them to hexadecimal provides a clue.)

手册页告诉我们 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的定义在哪里,你是怎么找到的?

EDIT:我在 kernel/sys.c 中找到了定义。我只 grep 了 sys_reboot,忘记了 grep 的 MAGIC 数字。我认为定义必须隐藏在一些宏技巧后面,所以我查看了 /boot 下的 System.map 文件,发现它在 ctrl_alt_del 。然后我用 grep 寻找那个符号,这让我找到了正确的文件。如果我从源代码编译内核,我可以尝试查找定义符号的目标文件,然后从那里开始。

最佳答案

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

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

开发者或开发者 child 的生日?

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

关于linux - Linux reboot() 系统调用的魔数(Magic Number),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4808748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com