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??
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