如果我在源代码上插入注释,它的二进制MD5会被改变吗?

本文关键字:MD5 二进制 改变 源代码 插入 注释 如果 | 更新日期: 2023-09-27 18:13:57

我只是想知道....如果是这样的话,我正在考虑为我销售的软件的每个客户创建不同的疾病,我是否可以使用MD5检查每个人,只需更改源代码中的注释并重新编译?我的意思是,c++、c#或java代码中的##注释会改变二进制MD5吗?

如果我在源代码上插入注释,它的二进制MD5会被改变吗?

注释在编译过程的早期(或之前)被删除,因此插入注释不会改变编译后二进制文件的哈希值。

唯一的例外(我能想到的)是如果你的二进制文件包含行号,它可以根据注释改变。这通常发生在调试模式下编译时,但您也可以使用c++中的__LINE__宏来强制执行。但即使在这种情况下,注释的内容也无关紧要,只与它占用了多少行无关(因此您不妨为此目的使用空行)。此外,发布的软件可能不应该包含这些信息。

简短的回答是否定的。注释在编译过程的早期被剥离。

更长的答案是,有时——但不可靠。有许多可预见的原因,可能会出现评论的痕迹(更像是副作用)。然而,这些都是脆弱的。

我想这是为了某种自动化过程,比如在网站上销售软件。如何输出一个头文件,如"user.h",简单地指定名称/电子邮件/用户名/等作为一个#define字符串,然后打印在你的程序的屏幕的某处(既为用户的利益,所以编译器不优化它)?它要求您为每个用户重新编译程序,但如果只需要几秒钟就可以构建,那么这可能不是问题。

在某些情况下,如果存在构建时间戳,则每次构建时的二进制文件都会更改。这可以提供您想要的可追溯性。但是,注释不应该影响发布模式二进制文件的MD5,除非你的编译器有bug。

注释不能编译为cpu操作码,因此它不会改变blob的哈希值

它可以更改二进制文件。

例如,在C/c++中有LINE宏。如果在代码中使用此选项,则如果添加或删除带有注释的行,则会更改二进制文件。