为什么文件格式有魔数?

时间:2010-10-01 17:17:46

标签: file-format

例如,Portable Executable有几个,包括开头的着名“MZ”,以及PE头开头的“PE \ 0 \ 0”。 Rar文件格式有“Rar!”标题在开头,其他几个在文件中有类似的“魔术值”。

这种神奇的价值观有什么用途?

5 个答案:

答案 0 :(得分:8)

由于用户更改了文件扩展名,或者其他程序窃取了文件扩展名,因此它允许应用程序取消处理未知格式的文件,而不是尝试最佳状态,然后无论如何都会失败。

答案 1 :(得分:6)

魔术数字的概念可以追溯到unix并提前使用文件扩展名。 shell的最初想法是所有“可执行文件”看起来都一样 - 无论文件是如何创建的,或者应该用什么程序来评估它。 shell将查看文件的内容并确定适当的文件。微软出现并选择了一种不同的方法,文件扩展的时代诞生了。然后,为了让用户“更好”,微软选择“隐藏”这些扩展和木马文件的时代看起来像是一种类型,但实际上有不同的扩展,并由不同的文件处理诞生。

答案 2 :(得分:2)

如果两个应用程序以不同方式存储数据,但构造为一个文件可能也是另一个文件的有效(但无意义)文件,则可能会发生非常糟糕的事情。程序可能认为它已成功加载文件(不知道数据没有意义),然后写回一个文件,该文件在语义上是相同的,但是编写它的应用程序(或其他任何东西)不再有意义地读取就此而言)。

使用魔术数字并不能完全阻止这种情况,但它至少可以有所帮助。

BTW,试图猜测数据格式通常非常危险。例如,假设有一个列表,其中可能是nn-nn-nn格式的日期。如果不知道日期的格式是什么,可能有足够的信息来很好地猜测格式(例如,如果其中一个记录是12-31-99,那么缺少相反的信息,日期可能是mm -dd-yy)但如果所有日期都在一个月的前12天内,那么数据很容易被误解。但是,假设数据前面有“MM-DD-YY”。然后可以减少误解的风险。

答案 3 :(得分:1)

快速识别文件的类型或文件中的位置。

答案 4 :(得分:1)

您的问题不应该是“为什么文件格式具有幻数”,而是“具有幻数的文件格式的优点是什么”!

建议:

  • 通过读取磁盘可用空间来取消删除文件的程序可能会识别文件类型
  • 您的UNIX知道可执行文件是解释(she-bang)还是二进制
  • 当您丢失扩展程序时,file等程序可以检测您的文件
  • 文件格式设计师认为,当应用程序可以轻松确保读取具有良好格式的文件时,它总是更安全。
  • 由于您有一个标题,因此将它放在标题开头不会花费太多。