【发布时间】:2010-10-01 17:17:45
【问题描述】:
比如Portable Executable有好几个,包括大名鼎鼎的“MZ”开头,还有PE头开头的“PE\0\0”。 Rar 文件格式有“Rar!” header 开头,其他几个在文件中有类似的“魔法值”。
这些神奇的价值有什么作用?
【问题讨论】:
标签: file-format
比如Portable Executable有好几个,包括大名鼎鼎的“MZ”开头,还有PE头开头的“PE\0\0”。 Rar 文件格式有“Rar!” header 开头,其他几个在文件中有类似的“魔法值”。
这些神奇的价值有什么作用?
【问题讨论】:
标签: file-format
由于用户更改文件扩展名,或其他程序窃取文件扩展名,它允许应用程序取消对未知格式文件的处理,而不是尽力而为,然后无论如何都失败了。
【讨论】:
幻数的概念可以追溯到 unix 并且早于文件扩展名的使用。 shell 最初的想法是所有的“可执行文件”看起来都是一样的——文件是如何创建的或者应该使用什么程序来评估它并不重要。 shell 将查看文件的内容并确定适当的文件。微软出现并选择了不同的方法,文件扩展的时代诞生了。然后,为了让用户感觉“更好”,微软选择“隐藏”这些扩展名,木马文件的时代诞生了,这些文件看起来是一种类型,但实际上具有不同的扩展名并由不同的文件处理。
【讨论】:
如果两个应用程序以不同的方式存储数据,但其构造使得其中一个应用程序的文件也可能是另一个应用程序的有效(但无意义)文件,则可能会发生非常糟糕的事情。一个程序可能认为它已经成功加载了文件(不知道数据是无意义的),然后写回一个在语义上相同的文件,但写入它的应用程序(或其他任何东西)将不再有意义地读取该文件就此而言)。
使用幻数并不能完全避免这种情况,但至少可以有所帮助。
顺便说一句,试图猜测数据的格式通常是非常危险的。例如,假设有一个可能是日期的列表,格式为 nn-nn-nn。如果不知道日期的格式,可能有足够的信息可以很好地猜测格式(例如,如果其中一条记录是 12-31-99,那么缺少相反的信息,日期可能是 mm -dd-yy) 但如果所有日期都在一个月的前 12 天内,则数据很容易被误解。但是,假设数据前面有“MM-DD-YY”。这样就可以减少误解的风险。
【讨论】:
快速识别文件的类型,或其中的位置。
【讨论】:
你的问题不应该是“为什么文件格式有幻数”,而应该是“文件格式有幻数有什么好处”!
建议:
file 等程序可以检测您的文件是什么【讨论】: