Я всегда был озадачен тем, как поставщики программного обеспечения могут отправить свое приложение или игру, а затем предоставить другой набор исполняемых файлов, которые изменяют поведение предыдущей сборки. Как это делается? Нужно ли оригинальное приложение и патч придерживаться какого-то правила? Или патч сканируется в исходный исполняемый файл и изменяет его информацию о сборке? Будет ли это требовать знания двоичного файла на уровне байтов?Какие знания необходимы для создания патча для вашей игры или приложения?
ответ
Есть два основных метода, которые я видел. Многие программы состоят из нескольких небольших частей, которые динамически загружаются во время выполнения, часто эти файлы просто заменяются более новыми версиями. Поскольку обновления часто влияют только на относительно небольшое количество этих файлов, патч может быть небольшим подмножеством всего приложения. Другой метод, который, как я видел, используется в больших монолитных приложениях, заключается в том, чтобы фактически изменить исполняемый код, используя своего рода «двоичный diff». Один из недостатков этого подхода заключается в том, что более сложно поддерживать обновление до новой версии из версии с несколькими версиями ранее без необходимости выполнять каждое инкрементное обновление.
Я подозреваю, что большую часть времени «заплатки» являются лишь некоторыми файлами замены.
Можно сравнить два двоичных файла, определить их отличия и создать набор команд редактирования, которые изменят один на другой. Утилита Unix Unix может сделать это для текстовых файлов, например.