Если вы программист, то наверняка слышали термин HOOK. Если вы точно не знаете, что означает этот термин, тогда вы попали по адресу.

По сути, это место в коде, которое позволяет вам подключаться к модулю, чтобы обеспечить другое поведение или реагировать, когда что-то происходит.

Ловушка — это функция, предоставляемая программным обеспечением для пользователей этого программного обеспечения, позволяющая вызывать свой собственный код при определенных обстоятельствах. Этот код может дополнить или заменить текущий код.

В старые времена, когда компьютеры были действительно личными, а вирусы были менее распространены (я говорю о 80-х), было так же просто, как исправить программное обеспечение операционной системы, чтобы оно вызывало ваш код. Я помню, как написал расширение для языка Applesoft BASIC на Apple II, которое просто подключало мой код к интерпретатору BASIC, вводя вызов в мой код до того, как любая строка была обработана.

Некоторые компьютеры имели заранее разработанные хуки, одним из примеров является поток ввода-вывода на Apple II. Он использовал такой хук для внедрения всей дисковой подсистемы (ПЗУ Apple II изначально были созданы в те дни, когда кассеты были основным носителем данных для ПК). Вы управляли дисками, напечатав код ASCII 4 (CTRL-D), за которым следовала команда, которую вы хотели выполнить, а затем CR, и она была перехвачена дисковой подсистемой, которая подключилась к Apple. Процедуры печати ПЗУ.

Так, например, строки:

PRINT CHR(4);"CATALOG"
PRINT CHR(4);"IN#6"

выведет список содержимого диска, а затем повторно инициализирует машину. Это позволяло использовать такие трюки, как защита ваших программ на BASIC, устанавливая первую строку как:

123 REM XIN#6

затем с помощью POKE вставьте символ CTRL-D туда, где был X. Затем любой, кто попытается перечислить ваш источник, отправит последовательность повторной инициализации через процедуры вывода, где дисковая подсистема обнаружит ее.

Часто нам приходилось прибегать к таким уловкам, чтобы добиться желаемого поведения.

В настоящее время, когда операционная система более безопасна, она сама предоставляет возможности для перехватов, поскольку вам больше не нужно изменять операционную систему «на лету» или на диске.

Они существуют уже долгое время. У мейнфреймов они были (называемые выходами), и многие программы для мэйнфреймов используют эти возможности даже сейчас. Например, бесплатная система управления исходным кодом, поставляемая с z/OS (называемая SCLM), позволяет вам полностью заменить подсистему безопасности, просто поместив свой собственный код в выход.

Теперь у вас может возникнуть один вопрос:

Это похоже на обратный вызов?

Нееет... БОЛЬШОЕ НЕТ. Обратный вызов является обратным вызовом и не имеет ничего общего с хуками, обратные вызовы просто ИСПОЛЬЗУЮТСЯ для РЕАЛИЗАЦИИ хуков-методов. Обратные вызовы — это указатели (RELJMP) на функции/методы/процедуры (CALL), хуки — это модификации запущенных приложений.

Обратный вызов можно рассматривать как особый вид ловушки. Реализуя в системе функцию обратного вызова, эта система позволяет вам вызывать некоторый дополнительный код после завершения действия. Однако перехват (как общий термин) не ограничивается обратными вызовами.

Подробнее читайте Перехват в программировании.