Article ID: 164151 - Last Review: October 26, 2007 - Revision: 3.1 How to compare binary images of the same project builds
This article was previously published under Q164151 SUMMARY
Sometimes you may need to compare the build images (EXE, DLL, etc.) of the
same project that were built at different times. Since the images contain
time and date stamps, a plain file compare reports the differences between
the images. You can use the DUMPBIN utility to generate the correct file
compare.
MORE INFORMATION
The time and date stamps can be removed from the built image without
removing relevant information (code and data) using the /RAWDATA switch
available in the DUMPBIN utility. Any file compare utility can then be used
on the DUMPBIN output as follows:
DUMPBIN /RAWDATA MyApp.EXE > first.txt DUMPBIN /RAWDATA MyApp.EXE > second.txt
FC /B first.txt second.txt
NOTE: There is no guarantee that Visual C++ will generate the same binary image when building the same source files on successive builds. However, you are guaranteed that the EXE (or DLL) will behave in precisely the same manner under execution, all other things being equal. Compile and link options and link order play a role in whether two binary images will compare equally. If you follow the procedures outlined above and the two images compare equally, then the images are the same. If the two images do not compare equally, then there is still uncertainty as to whether the images are the same or not. The resource section of the executable contains date/time stamps. In the resource section of the executable, there is a header for each type of resource (for example, string table, dialog, icon). Each of these headers contains a date/time stamp. Use the Microsoft Portable Executable and Common Object File Format Specification from the MSDN Library to alter the date/time stamps so that they won't be a factor in the comparison or ignore the resources section in the comparison. To identify the section containing the differences, run the WinDiff utility shipped with Visual C++: WINDIFF first.txt second.txt RAW DATA #5 dumpbin /headers MyApp.exe
SECTION HEADER #5
.rsrc name
The Export Directory Table has a date/time stamp as well. This is typically located in the .rdata section (Visual C++ 4.2 and later) or the .edata section (earlier than Visual C++ 4.2). This table exists only if you export symbols from the PE image. The Import Directory Table also has a date/time stamp. This is typically located in the .idata section. One of these tables exists for each DLL to which the image refers. This date/time stamp is zero unless the image is bound. Once the image is bound, the date/time stamp is set to the date/time stamp of the DLL from where the symbols are imported. Once again, please refer to the Microsoft Portable Executable and Common Object File Format Specification in the MSDN Library for information on how to locate the date/time information in an image. APPLIES TO
| Other Resources Other Support Sites
CommunityArticle Translations
|





















Back to the top