Linux 魔数¶
此文件是正在使用的魔数注册表。当你在一个结构体中添加魔数时,也应该将其添加到此文件中,因为各种结构体使用的魔数最好是唯一的。
用魔数保护内核数据结构是一个非常好的主意。这允许你在运行时检查 (a) 结构体是否被破坏,或 (b) 你是否将错误的结构体传递给了某个例程。最后一点特别有用——尤其是当你通过 void * 指针传递结构体指针时。例如,tty 代码经常这样做,以在不同的驱动程序特定结构和线路规程特定结构之间进行传递。
使用魔数的方法是在结构体的开头声明它们,如下所示
struct tty_ldisc {
int magic;
...
};
在向内核添加未来的增强功能时,请遵循这一准则!它为我节省了无数的调试时间,尤其是在数组越界并覆盖了数组之后结构体的那些混乱情况下。使用这一准则,这些情况可以快速且安全地被检测到。
更新日志
Theodore Ts'o
31 Mar 94
The magic table is current to Linux 2.1.55.
Michael Chastain
<mailto:mec@shout.net>
22 Sep 1997
Now it should be up to date with Linux 2.1.112. Because
we are in feature freeze time it is very unlikely that
something will change before 2.2.x. The entries are
sorted by number field.
Krzysztof G. Baranowski
<mailto: kgb@knm.org.pl>
29 Jul 1998
Updated the magic table to Linux 2.5.45. Right over the feature freeze,
but it is possible that some new magic numbers will sneak into the
kernel before 2.6.x yet.
Petr Baudis
<pasky@ucw.cz>
03 Nov 2002
Updated the magic table to Linux 2.5.74.
Fabian Frederick
<ffrederick@users.sourceforge.net>
09 Jul 2003
魔数名称 |
编号 |
结构 |
文件 |
|---|---|---|---|
PG_MAGIC |
‘P’ |
pg_{read,write}_hdr |
|
APM_BIOS_MAGIC |
0x4101 |
apm_user |
|
FASYNC_MAGIC |
0x4601 |
fasync_struct |
|
SLIP_MAGIC |
0x5302 |
slip |
|
KV_MAGIC |
0x5f4b565f |
kernel_vars_s |
|
CODA_MAGIC |
0xC0DAC0DA |
coda_file_info |
|
CCB_MAGIC |
0xf2691ad2 |
ccb |
|
QUEUE_MAGIC_FREE |
0xf7e1c9a3 |
queue_entry |
|
QUEUE_MAGIC_USED |
0xf7e1cc33 |
queue_entry |
|
NMI_MAGIC |
0x48414d4d455201 |
nmi_s |
|