英語

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

include/uapi/linux/pg.h

APM_BIOS_MAGIC

0x4101

apm_user

arch/x86/kernel/apm_32.c

FASYNC_MAGIC

0x4601

fasync_struct

include/linux/fs.h

SLIP_MAGIC

0x5302

slip

drivers/net/slip/slip.h

BAYCOM_MAGIC

19730510

baycom_state

drivers/net/hamradio/baycom_epp.c

HDLCDRV_MAGIC

0x5ac6e778

hdlcdrv_state

include/linux/hdlcdrv.h

KV_MAGIC

0x5f4b565f

kernel_vars_s

arch/mips/include/asm/sn/klkernvars.h

CODA_MAGIC

0xC0DAC0DA

coda_file_info

fs/coda/coda_fs_i.h

YAM_MAGIC

0xF10A7654

yam_port

drivers/net/hamradio/yam.c

CCB_MAGIC

0xf2691ad2

ccb

drivers/scsi/ncr53c8xx.c

QUEUE_MAGIC_FREE

0xf7e1c9a3

queue_entry

drivers/scsi/arm/queue.c

QUEUE_MAGIC_USED

0xf7e1cc33

queue_entry

drivers/scsi/arm/queue.c

NMI_MAGIC

0x48414d4d455201

nmi_s

arch/mips/include/asm/sn/nmi.h