完全相同的文件多次编译后的md5都不一样
C#和D不知道其他人有没有这样的情况如果也是这样,为什么编译后的md5码会不同呢?既然是同一个文件,用同一编译器编译出来的,理论上编译出来的可执行程序是一致的才对,如果不...
C#和D
不知道其他人有没有这样的情况
如果也是这样,为什么编译后的md5码会不同呢?
既然是同一个文件,用同一编译器编译出来的,理论上编译出来的可执行程序是一致的才对,如果不一致那是什么部分不一样呢? 展开
不知道其他人有没有这样的情况
如果也是这样,为什么编译后的md5码会不同呢?
既然是同一个文件,用同一编译器编译出来的,理论上编译出来的可执行程序是一致的才对,如果不一致那是什么部分不一样呢? 展开
5个回答
展开全部
建议你学习一下PE文件(通常的exe可执行文件就是一种PE文件)结构
其中由一个时间日期段
记录了PE文件被创建的时间
每一次编译的时间不同
因此此段的内容也不同
因此最终生成的文件内容有差异
继而md5码有异
附:
PE部分结构C语言描述:
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;//这里就是时间日期戳了 是链接器产生的时间
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
下图在一个具体的可知性文件中标示了此段的位置:
展开全部
你这是两个问题。
一、同一数据产生的MD5值是一样的。
二、同一个编译器对同一程序文件可能会产生出不同的文件。
第一个问题就不解释了,你找一些和MD5有关资料就行了。它是一种单向希哈函数。类似于y=f(x)形式。
编译器对程序文件解释时,会涉及内存分配,寄存器分配、堆栈分配、代码优化等各种各样的操作,而这些操作并不能保证每次产生相同的结果。所以最终在程序(EXE)中使用的代码就不同。
说明:这些说的结果不同是在保证原来程序含义的情况下。比如,1+1=2,而0+2=2。虽然都等于2但是可以有很多种解释。
所以最终的程序文件就相同了,所以MD5也不同了。
一、同一数据产生的MD5值是一样的。
二、同一个编译器对同一程序文件可能会产生出不同的文件。
第一个问题就不解释了,你找一些和MD5有关资料就行了。它是一种单向希哈函数。类似于y=f(x)形式。
编译器对程序文件解释时,会涉及内存分配,寄存器分配、堆栈分配、代码优化等各种各样的操作,而这些操作并不能保证每次产生相同的结果。所以最终在程序(EXE)中使用的代码就不同。
说明:这些说的结果不同是在保证原来程序含义的情况下。比如,1+1=2,而0+2=2。虽然都等于2但是可以有很多种解释。
所以最终的程序文件就相同了,所以MD5也不同了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵 你的两次文件的日期肯定不一样吧,日期信息不是操作系统保存的,而是在二进制文件本身内容的固定位置里包含的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵!当然了MD5是随即不可逆算法每次生成都取的不同的随机基数码!很正常的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按理说,一个文件对应一个唯一的Md5值,编译后文件发生轻微变化也就造成Md5值变化,有Md5碰撞的可能,但几率很小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询