Ответ 1
Есть несколько вариантов использования, которые приходят мне на ум:
-
Горячее исправление. Позволяет обновлять/исправлять части вашего кода без фактического завершения процесса или перезапуска. Сама Microsoft убедилась, что большие части Windows являются hot-patchable, префиксными функциями с 5-байтовым блоком NOP. Зачем? Поскольку вы можете использовать JMP для любой другой части вашего кода в 5 байтах, поэтому hot-patching в основном перезаписывает байты префикса JMP на обновленный/исправленный код и voila, ваш код делает что-то совершенно новое. Это часто используется вместе с DLL-инъекцией для загрузки нового кода в целевой процесс, и, хотя это необязательно, в нем используется
-
Ведение журнала. В том же духе код обхода часто используется для префикса функции для ведения журнала, т.е. для просмотра, с какими параметрами он вызывается. Кроме того, некоторые приложения, которые записывают экранный вывод из приложений DirectX, делают это, объединяя вызовы DirectX, что снова включает в себя инъекцию DLL в процесс, который контролирует вызовы.
-
Подклассификация: не в смысле ООП, а в смысле Windows, то есть предоставление нового WndProc для существующего окна для изменения его поведения. Хотя вы можете просто установить другую процедуру обработки сообщений с помощью SetWindowLongPtr, ограничивающим фактором является то, что функция должна находиться в адресном пространстве целевого процесса, В этом случае инъекция снова появляется - вы предоставляете новую реализацию в DLL, вставляете ее в целевой процесс и вызываете
SetWindowLongPtr
. Это можно использовать, например, для создания пользовательского дополнительного чертежа в чужом окне.
Мне лично приходилось иметь дело со всеми вышеперечисленными примерами использования в прошлом, в обычных бизнес-приложениях, от использования горячего исправления, чтобы обеспечить время безотказной работы в критической системе уведомлений в медицинских службах для использования обходных путей/ведения журнала, чтобы разрешить проприетарную запись (уже давно уже мертвым магазином программного обеспечения), чтобы поговорить с полномасштабным CRM-решением в режиме реального времени.
Как всегда, это просто инструмент в вашем ящике, и в нем нет ничего по своей сути "зла". это в какой бы то ни было целях вы его используете.