Zay*_*Jay 5 c++ executable compare
我试图测试Visual Studio从相同的代码生成可预测/可重复的可执行文件.
为此,我正在创建一个小程序(一个.cpp文件)并构建.exe(A),进行一些更改并制作另一个.exe(B),然后取消更改并制作另一个.exe( C).
我的理论是A和C的信息是相同的,并确认MSVS从相同的代码生成可预测/可重复的.exe.
几个问题:
(我已经在.txt中保存了命令的结果)
我已经使用dumpbin/rawdata来删除时间/日期戳数据并保存文件每个部分的原始内容(不完全确定"原始"意味着什么),但与windiff比较时留下2行差异.
运行dumpbin/headers显示调试目录下的.rdata部分(原始数据#2)的差异; 差异在时间(预期)和格式:X,{Y},"差异在这里",Z列.
我搜索论坛和msdn几个小时,无法找到使用dumpbin的解决方案.类似的论坛帖子以耸耸肩膀结束.
任何人都可以帮我一把吗?我会尽力按要求添加更多特异性.
谢谢你,ZayJay
已查看参考文献:
http://support.microsoft.com/kb/177429
http://support.microsoft.com/kb/164151
http://msdn.microsoft.com/en-us/windows/hardware/gg463119.aspx
http://www.ms-news.net/f3614/how-can-i-compare-2-executables-1980031.html
+其他...
此外,在我的.cpp和一个新的.cpp之间进行比较,主要只返回0,在同一区域产生差异.我希望dumpbin/headers结果的.text(原始数据#1)部分存在差异......任何阅读或直接答案的内容都会很棒!谢谢!
小智 2
可移植可执行格式中有一些字段会改变每个编译(PE 格式用于 .exe 和 .dll)。编写一个解析应用程序来内存映射这样的 exe 并遍历其内部数据结构并不太难(事实上,这就是 dumpbin 所做的)。您基本上需要确保排除任何 GUID、日期戳和任何其他可能合理更改的内容。
http://en.wikipedia.org/wiki/Portable_Executable(来自 Microsoft 的 PE 格式文档)的参考部分解释了该格式。我编写了一个类似的应用程序(我的应用程序是提取资源部分的版本信息)并发现文档非常好。
也就是说,这似乎有点浪费时间。现代编译器的工作非常出色。而且它们通常没有随机性,因此您应该期望 .rdata、.data 和 .text 部分通常是相同的。一般来说,当您开始质疑您的编译器(尤其是像 Visual Studio 或 gcc 这样的大编译器)时,您很可能应该深吸一口气,然后回去看看您自己的代码。错误很少而且间隔很远。少数通常已经有关于它们的 MSDN/StackOverflow 文章。
(换句话说:你到底想实现什么目标?)