Есть несколько способов сделать это, самым простым будет XOR двух файлов и сжатие их (GZIP или так далее). Теория, лежащая в основе этого, состоит в том, что мы надеемся, что вы можете получить большую последовательность нулей (длинные последовательности с одинаковыми значениями хорошо сжимаются).
Вы можете продолжить эту концепцию и попытаться найти области двух файлов, в которых данные идентичны, и полностью их опустить.
Наконец, вы можете использовать структуру каждого типа файлов в ваших интересах. Например, в EXE вы можете упаковать каждый метод отдельно (только те, которые были изменены) и восстановить EXE самостоятельно во время применения патча; имейте в виду, однако, что это очень вероятно в области избыточного убийства и может не стоить усилий (выигрыш по сравнению с простым bdiff может не оправдать дополнительную сложность, которая может сломаться в дикой природе). В качестве другого примера вы можете использовать файлы diff для скриптов.
Однако большинство систем исправлений в дикой природе выбирают самый простой путь: они просто упаковывают файлы, которые изменились - они не пытаются упаковывать только изменения в этих файлах (вероятно, по уважительной причине, большая часть игрового контента уже сжата и создает исправления для больших энтропия или сжатые данные не будут работать вообще ).