rdiff is a little like diff and patch all rolled into one, with support for binary files. Since it takes advantage of the rsync remote-delta algorithm, you do not need the source file in the same place as your destination file.

To use it, you generate a "signature" of the original file and copy the signature (which is very small) to the same location as the modified file. Then you generate a "delta" which describes the changes required to turn the source file into the modified file. The small delta file can then be used to "patch" the original file, to transform it into the modified file.