魔数是什么?
魔数,magic number,这真是让人迷惑不解,什么样的数字是魔数呢?魔数又是什么意思呢?哈哈,其实魔数的本意就是让人感到迷惑的数,看到某个数,不知道其代表何意,用东北话说,都蒙圈了。
魔数,其实也称为神奇数字,我们大多数人是在学习计算机过程中接触到这个词的。它被用来为重要的数据定义标签,用独特的数字唯-地标识该数据,这种独特的数字是只有少数人才能掌握其奥秘的“神秘力量”。
故,直接出现的一个数字,只要其意义不明确,感觉很诡异,就称之为魔数。魔数应用的地方太多了,如elf 文件头。
ELF Header :
Magic : 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
这个Magic 后面的一长串就是魔数, elf 解析器(通常是程序加载器)用它来校验文件的类型是否是elf。
主引导记录最后的两个字节的内容是0x55, 0xaa,这表明这个扇区里面有可加载的程序, BIOS 就用它来校验该扇区是否可引导。
有人说只要为这些数字赋予实际的意义不就行了吗。其实,无论怎么给这组陌生的数字赋予名称,它都不像熟悉的出生日期那样直观易懂(如对于19590318,不解释大家也会知道0318 是3 月18 日),反而还要额外增加一些内容来解释,得不偿失,所以这就是魔数不得不存在的原因。
我们知道,一个硬盘上可以有很多分区,每个分区的格式又可以不同。就拿Linux 来说,既能识别ext3,又能识别ext4 。可能有同学会说,这两个分区的文件系统都是Linux 自己专用的,当然认得自己的东西了。
可是自己的东西也得有个辨别的地方,否则凭什么说“认得”呢。
其实这是魔数的作用,文件系统也有自己的魔数,魔数的神秘力量在此施展了。各分区都有超级块,一般位于本分区的第2 个扇区,比如若各分区的扇区以0 开始索引,其第1 个扇区便是超级块的起始扇区。超级块里面记录了此分区的信息,其中就有文件系统的魔数, 一种文件系统对应一个魔数,比对此值便知道文件系统类型了。