I have a set of binary configuration files with three versions each -- an original, and two differently-modified versions of each file. I need to be able to see the differences between the two versions as well as the original, all at the same time.
What I need is a three-way diff tool for binary files. Through a rather exhausting Google search, I eventually happened upon a screenshot of an application that does exactly what I need -- unfortunately, the forum post containing the image does not mention what application it is they're using:
http://www.xboxhacker.org/index.php?topic=15032.0
Can someone point me in the direction of a (Windows) application that provides a binary-safe (hex) comparison of three binary files??
A Hex Compare session visually compares the raw content of two files, either in a side-by-side or over-under layout. It displays file content byte-by-byte, using the hexadecimal notation typical of hex editors.
Use the command cmp to check if two files are the same byte by byte. The command cmp does not list differences like the diff command. However it is handy for a fast check of whether two files are the same or not (especially useful for binary data files).
Binary ComparisonWinMerge can detect whether files are in text or binary format. When you launch a file compare operation on binary files, WinMerge opens each file in the binary file editor.
diff determines whether a file is text or binary by checking the first few bytes in the file; the exact number of bytes is system dependent, but it is typically several thousand. If every byte in that part of the file is non-null, diff considers the file to be text; otherwise it considers the file to be binary.
Vim has a built-in diff tool that can compare an arbitrary number of files. It also runs on Windows. You can find it at http://vim.org.
The standard installation of vim for windows includes xxd
, which allows you to see binary files as text:
So for example if you try:
xxd xxd.exe
you'll get:
0000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ..............
0000010: b800 0000 0000 0000 4000 0000 0000 0000 ........@.......
0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000030: 0000 0000 0000 0000 0000 0000 d800 0000 ................
0000040: 0e1f ba0e 00b4 09cd 21b8 014c cd21 5468 ........!..L.!Th
0000050: 6973 2070 726f 6772 616d 2063 616e 6e6f is program canno
0000060: 7420 6265 2072 756e 2069 6e20 444f 5320 t be run in DOS
0000070: 6d6f 6465 2e0d 0d0a 2400 0000 0000 0000 mode....$.......
0000080: 6ba7 bec3 2fc6 d090 2fc6 d090 2fc6 d090 k.../.../.../...
etc...
So you can use xxd
to dump your binary files into text files:
xxd orig > orig.txt
xxd mod1 > mod1.txt
xxd mod2 > mod2.txt
And then run vim in diff mode:
vim -d orig mod1 mod2
And this will give you something like this:
(This screenshot was taken from here and is no more than an illustration of what a 3-way diff will look like in VIM)
All of these tools are available in windows, so they should solve your problem.
Edit:
After you merge the results of xxd
, you can convert the hex dump into a binary file using xxd -r
:
xxd -r merged_xxd_file merged_binary_file
You can see more details and options in xxd
's manpage
The screenshot is from Araxis Merge. Their pro edition ($270) supports 3-way compares.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With