#!/usr/bin/env perl
#
# Binary diff utility for radare
#
# TODO
#  -  allow to handle big files with low memory footprint
#
# author:  pancake <pancake@youterm.com>
# license: gpl (>=2)
#

my $a=$ARGV[0];
my $b=$ARGV[1];

die "Usage: bindiff [a-file] [b-file]\n".
    "f.e.:  bindiff a.out b.out | rsc bdcolor 3\n"
	if ($a eq "" or $b eq "" or $a eq "-h");

sub domybest {
	unlink $tmpa;
	unlink $tmpb;
	exit 0;
}

$SIG{INT}=\&domybest;

sub bin_to_hex_column {
	my($filename, $column) = @_;
	open LOG, "$column";
	open A, "<$filename" || die "cannot open $filename";
	while(1) {
		last if 0 == read(A,$buf,1);
		$str = sprintf("%02x\n", ord($buf));
		print LOG $str;
	}
	close LOG;
	close A;
}

$tmpa="/tmp/.a.$$.".int rand(0xfef);
bin_to_hex_column($a, ">$tmpa");
$tmpb="/tmp/.b.$$.".int rand(0xefe);
bin_to_hex_column($b, ">$tmpb");

system("diff -yW 15 $tmpa $tmpb"); # | rsc bdcolor 3

domybest;
