You can compare data using the 'c' command that accepts different input formats and compares the input against the bytes in the current seek.
> c? Usage: c[?|d|x|f] [argument] c [string] - compares a plain with escaped chars string cc [offset] - code bindiff current block against offset cd [offset] - compare a doubleword from a math expression cx [hexpair] - compare hexpair string cf [file] - compare contents of file at current seek
An example of memory comparision:
[0x08048000]> p8 4 7f 45 4c 46 [0x08048000]> cx 7f 45 90 46 Compare 3/4 equal bytes 0x00000002 (byte=03) 90 ' ' -> 4c 'L' [0x08048000]>
This is also useful for comparing memory pointers at certain offsets. The variable cfg.bigendian is used to change the value in the proper way to be compared against the contents at the '0x4A13B8C0' offset:
[0x4A13B8C0]> cd 0x39e8e089 @ 0x4A13B8C0 Compare 4/4 equal bytes [0x4A13B8C0]> p8 4 89 e0 e8 39
It takes 4 bytes from the current seek (0x4A13B8C0) and compares them to the number given. This number can be an math expressions using flag names and so:
[0x08048000]> cx 7f 45 90 46 Compare 3/4 equal bytes 0x00000002 (byte=03) 90 ' ' -> 4c 'L' [0x08048000]>
We can use the compare command against a file previously dumped to disk from the contents of the current block.
$ radare /bin/true [0x08049A80]> s 0 [0x08048000]> cf /bin/true Compare 512/512 equal bytes