我想知道在运行该文件之前或之后在.exe文件上生成校验和时是否会得到不同的结果。我更关心常见的做法(例如生成像firefox.exe这样的热门应用程序的SHA哈希),而不是边界情况,但两者都很有趣。感谢。
答案 0 :(得分:7)
只要文件相同(即,只包含相同的字节,按相同的顺序),文件的散列应该是常量。很难找到在运行时重写磁盘表示的应用程序,因此散列应不变。有自修改程序,但它们倾向于在内存加载的代码副本上运行,而不是磁盘副本。
编辑:我们应该考虑“自我更新”应用程序,但这些应用程序倾向于启动一个小帮助程序来下载和更新核心应用程序。在执行期间更新执行很困难(特别是在Windows上)。 UNIX系统倾向于操作Copy on Write系统,因此软件更新可能会改变您的可执行文件 - 但同样,这是一个“极端情况”。
答案 1 :(得分:2)
只有当exe改变时,哈希才会改变。只有在应用程序修改自身时才会发生这种情况,如果没有应用程序重新启动,这将不会发生在Windows上。 Firefox可能会自行更新(包括重启),但除此类情况外,哈希值将保持不变。
答案 2 :(得分:2)
如果文件发生变化,哈希值将会改变。
EXE文件很少自行更改。如果用户更新到新版本,firefox.exe
会发生变化。
您可以在运行EXE文件之后检查EXE文件的“修改日期”属性(如firefox.exe
)以查看它是否已更改,但您可能会发现它没有。
答案 3 :(得分:1)
如果您的意思是修改上次访问时间,请不要担心,它存储在文件系统级别,而不是存储在文件中,因此哈希将保持不变。