Magic Number魔数是什么

在网上查magic number的相关介绍的时候,看到很多人的博客中说magic number之所以叫magic number,就是因为我们并不知道它有什么含义。。。


最后看了知乎上的回答:

Magic number一般是指硬写到代码里的整数常量,数值是程序员自己任意设置的,其他人并不知道数值有什么具体意义(可能过一段时间,编程者本人也忘了其具体含义了。。。),表示不明觉厉,就称作magic number。

举了例子:

ELF文件头会写入一个magic number,检查这个数和自己预想的是否一致可以判断文件是否损坏。
在缓冲区数组旁放一个magic number(称作canary金丝雀),通过检查是否一致可检测缓冲区溢出攻击。


另外维基百科上提到了很多含有magic number的文件格式:

1. 一些图像文件中存在的魔数。比如,bmp文件中的'BM',JPEG/JFIF中的'JFIF',等等。
2. 某些格式的声音、视频文件中存在中的魔数。
3. PE文件、ELF文件中存在的魔数。
4. 各种文本编码中的BOM也可以看做魔数。比如UTF-8、UTF-16、UTF-32的BOM。

此外,Linux中的file命令,是根据文件中的魔数来判断文件类型,这要优于使用文件后缀来进行判断。(似乎是magic number的另一个用处)

对于知乎上回答的例子,magic number就是对你要处理的一段数据,最初进行的一个粗略判断。主要是怕处理了半天,原来输入是段垃圾,浪费自己时间,甚至把自己程序搞奔溃。你可以认为,magic number读到是对的,你有就有99%的信心,这个数据应该不是垃圾,值得分析。但是真要保证这个数据是99.9999999%正确的,恐怕还是要CRC甚至数字签名才行。


参考:https://www.zhihu.com/question/22018894

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值