Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tool for 3-Way Binary (Hex) File Comparison?

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

like image 616
Brian Lacy Avatar asked Dec 30 '10 02:12

Brian Lacy


People also ask

How do you compare hex 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.

How do you compare binary files?

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).

Can WinMerge compare binary 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.

Does diff work for binary files?

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.


2 Answers

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:

example of 3-way vimdiff

(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

like image 61
Nathan Fellman Avatar answered Oct 11 '22 13:10

Nathan Fellman


The screenshot is from Araxis Merge. Their pro edition ($270) supports 3-way compares.

like image 27
Zoë Peterson Avatar answered Oct 11 '22 11:10

Zoë Peterson