为什么每次编译之后计算MD5都不相同?

一桶姜山 2013-07-24 11:57:24
代码完全不变,重新编译,每次出来的的文件MD5都不一样。

我用UE的2进制比较工具比较了一下,除了PE头中的时间戳和校验和2处不同之外,在很后面的地方还会有2处不同,我本来想做个工具判断2个exe是否是同一个代码编译出来的,可是遇到这样的问题后发现没法简单判断了。
求高手,这后面哪块莫名奇妙的不同之处是怎么造成的?
...全文
1978 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
businiaowyf 2013-12-26
  • 打赏
  • 举报
回复 2
正解是你代码里使用了__TIME__, __DATE__之类的宏
www_adintr_com 2013-07-24
  • 打赏
  • 举报
回复
在中间位置不一定就是代码或数据, 你的根据 PE文件的节表来找代码段和数据段才行. 你是 Debug 版还是 Release 版? Debug 版的话里面还存了 pdb 文件的版本之类的信息.
一桶姜山 2013-07-24
  • 打赏
  • 举报
回复
编译选项什么都没变,只是重新编译了一下。 而且只是时间戳和校验和不同到还简单,我可以在算md5之前把这2个部分置0,但是后面出现的不同之处就有点摸不着头脑了,我看了下位置是大概是出现在文件的中间部位。有时候编译出来10来个字节不同,有时候是1个字节不同,感觉这个地方不是代码段就是数据段了啊
www_adintr_com 2013-07-24
  • 打赏
  • 举报
回复
换个编译选项, 换个编译器更加不同了, 如何去判断是否同一份代码生成的... 你试试只比较代码段, 和数据段, 其它地方的差别就别管了.
  • 打赏
  • 举报
回复
引用 5 楼 paulcxz 的回复:
我编译的是RELEASE版的 本来想做个简单的判断,看来这下要彻底研究PE文件格式才行了啊
确实了,里面还是有很多别的信息的。
一桶姜山 2013-07-24
  • 打赏
  • 举报
回复
我编译的是RELEASE版的 本来想做个简单的判断,看来这下要彻底研究PE文件格式才行了啊
davidyu720 2013-07-24
  • 打赏
  • 举报
回复
编译链接得到的EXE和DLL文件,除了数据段和代码段以外,在特定地方还保存了编译程序、链接程序运行产生的一些信息。这些信息不是固定不变的。

70,005

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧