Hotpatch позволяет заменить подходящий код без обычной перезагрузки, но это не означает, что разные программы могут свободно переписывать одну точку входа. Механизм hotpatch в Windows рассчитан на контролируемый процесс обновления и подразумевает, что зарезервированная область функции остаётся под управлением системного механизма.
Один координатор изменений
Схема hotpatch рассчитана на применение обновлений системой обновления в поддерживаемой конфигурации. Обновление должно быть подготовлено для hotpatch, и сам механизм ожидает отсутствие посторонних модификаций в целевых участках кода. Самовольный detour или подмена функции сторонней программой нарушают это предположение и приводят к тому, что файл может быть признан непригодным для горячего обновления, что потребует обычной перезагрузки.
Если между этапом предварительной проверки и фактическим применением патча функция была изменена, возникает гонка, из-за которой корректное и безопасное применение hotpatch становится невозможным.
Почему не любой фикс подходит
Hotpatch заменяет код на уровне функций, но изменения раскладки памяти, ожиданий о состоянии объектов или инвариантов структуры данных могут оказаться несовместимы с уже созданными объектами в процессе. Простая подмена одной функции сторонним перехватом сама по себе не решает таких проблем и может повлечь неконсистентность в работе программы.
В итоге повторные системные обновления, координируемые операционной системой, и независимые сторонние модификации — это разные сценарии, требующие разных подходов к безопасности и совместимости. Механизм hotpatch предназначен для контролируемого применения исправлений и не предусматривает совместного использования зарезервированной области несколькими независимыми патчерами.