답변:
본질적으로 이것은 코드를 사용하여 다른 동작을 제공하거나 어떤 일이 발생할 때 반응하도록 모듈을 활용할 수 있습니다.
후크는 해당 소프트웨어 사용자가 특정 상황에서 호출 한 고유 코드를 갖도록 소프트웨어가 제공하는 기능입니다. 이 코드는 현재 코드를 확장하거나 대체 할 수 있습니다.
예전에는 컴퓨터가 실제로 개인용이고 바이러스가 널리 보급되지 않았던 시절 ('80 년대 이야기), 운영 체제 소프트웨어 자체를 패치하여 코드를 호출하는 것만 큼 간단했습니다. Apple II에서 Applesoft BASIC 언어의 확장을 작성하여 회선이 처리되기 전에 코드를 호출하여 내 코드를 BASIC 인터프리터에 간단히 연결 한 것을 기억합니다.
일부 컴퓨터에는 미리 디자인 된 후크가 있었는데, 그 예로 Apple II의 I / O 스트림이 있습니다. 이러한 후크를 사용하여 전체 디스크 하위 시스템을 주입했습니다 (Apple II ROM은 원래 카세트가 PC의 기본 저장 매체였던 시절에 만들어졌습니다). ASCII 코드 4 ( ) 다음에 실행하려는 명령 다음에 a 를 인쇄 하여 디스크를 제어했으며 디스크 하위 시스템이이를 가로 채서 Apple ROM 인쇄 루틴에 연결했습니다.CTRL-D
CR
예를 들어 라인은 다음과 같습니다.
PRINT CHR(4);"CATALOG"
PRINT CHR(4);"IN#6"
디스크 내용을 나열한 다음 머신을 다시 초기화하십시오. 이를 통해 첫 번째 줄을 다음과 같이 설정하여 BASIC 프로그램을 보호하는 것과 같은 트릭을 얻을 수있었습니다.
123 REM XIN#6
그런 다음를 사용하여 위치에 문자 POKE
를 삽입하십시오 . 그런 다음 소스 목록을 작성하려는 사람은 디스크 하위 시스템이이를 감지하는 출력 루틴을 통해 다시 초기화 시퀀스를 보냅니다.CTRL-D
X
그것은 종종 우리가 원하는 행동을 얻기 위해 의지해야 할 속임수입니다.
요즘 운영 체제가 더 안전 해지면 운영 체제를 더 이상 "기내"또는 디스크에서 수정하지 않아도되므로 후크 자체를위한 기능을 제공합니다.
그들은 다닌 긴 시간입니다. 메인 프레임에는 출구가 있으며 많은 메인 프레임 소프트웨어가 현재 이러한 기능을 사용합니다. 예를 들어, z / OS와 함께 제공되는 무료 소스 코드 제어 시스템 (SCLM이라고 함)을 사용하면 종료에 사용자 고유의 코드를 배치하여 보안 서브 시스템을 완전히 대체 할 수 있습니다.
일반적으로 "후크"는 프로그래머, 시스템, 프로그램에서 이미 진행중인 작업을 보거나 상호 작용 및 / 또는 변경할 수있는 기능입니다.
예를 들어 Drupal CMS는 개발자에게 "컨텐츠 노드"가 생성 된 후 추가 조치를 취할 수있는 후크를 제공합니다. 개발자가 후크를 구현하지 않으면 노드가 정상마다 작성됩니다. 개발자가 후크를 구현하면 노드를 만들 때마다 추가 코드를 실행할 수 있습니다. 이 코드는 롤백 및 / 또는 원래 작업 변경을 포함하여 모든 작업을 수행 할 수 있습니다. 또한 노드 생성과 관련이없는 작업을 수행 할 수도 있습니다.
콜백은 특정 종류의 후크로 생각할 수 있습니다. 콜백 기능을 시스템에 구현하면 해당 시스템에서 작업이 완료된 후 추가 코드를 호출 할 수 있습니다. 그러나 후킹 (일반적인 용어)은 콜백에만 국한되지 않습니다.
다른 예시. 때때로 웹 개발자는 요소의 클래스 이름 및 / 또는 ID를 후크라고합니다. ID / 클래스 이름을 요소에 배치하면 Javascript를 사용하여 해당 요소를 수정하거나 페이지 문서에 "연결"할 수 있기 때문입니다. (이것은 의미를 확장하고 있지만 일반적으로 사용되며 언급 할 가치가 있습니다)
후크는 기본 코드가 확장 코드를 호출 할 수 있도록하는 기능 범주입니다. 이는 핵심 개발자가 코드를 노출하지 않고 확장 성을 제공하려는 경우에 유용 할 수 있습니다.
후크의 한 가지 사용법은 비디오 게임 모드 개발에 있습니다. 게임은 모드 개발자가 기본 기능을 확장 할 수는 없지만 핵심 모드 라이브러리 개발자가 후크를 추가 할 수 있습니다. 이러한 후크를 통해 독립 개발자는 게임로드, 인벤토리 업데이트, 엔터티 상호 작용 등과 같은 원하는 이벤트를 호출하는 사용자 지정 코드를 가질 수 있습니다.
일반적인 구현 방법은 함수에 빈 콜백 목록을 제공 한 다음 콜백 목록을 확장하는 기능을 제공하는 것입니다. 기본 코드는 항상 동일하고 적절한 시간에 함수를 호출하지만 콜백 목록이 비어 있으면 함수가 수행하지 않습니다. 이것은 의도적으로 설계된 동작입니다.
그러면 타사는 추가 코드를 작성하고 새 콜백을 후크의 콜백 목록에 추가 할 수 있습니다. 사용 가능한 후크를 참조 할뿐 아니라 기본 시스템에 대한 위험을 최소화하면서 기능을 확장했습니다.
후크를 사용하면 개발자가 다른 구조 및 인터페이스로는 수행 할 수없는 작업을 수행 할 수 없습니다. 작업 및 사용자 (타사 개발자)를 고려하여 선택합니다.
설명을 위해 : 후크는 확장을 허용하며 콜백을 사용하여 구현 될 수 있습니다. 콜백은 일반적으로 함수 포인터에 지나지 않습니다. 함수의 계산 된 주소 다른 답변 / 의견에 혼란이있는 것으로 보입니다.
종종 후킹은 Win32 메시지 후킹 또는 Linux / OSX 동등 항목을 의미하지만,보다 일반적으로 후킹은 지정된 동작이 발생할 때 알림을 받도록 다른 객체 / 창 / 프로그램 등을 단순히 알리는 것입니다. 예를 들어 : 시스템의 모든 창을 닫으려고 할 때 알립니다.
일반적으로 후킹은 시스템에 어떤 영향을 미치는지 이해하지 못하기 때문에 다소 위험하므로 불안정하거나 예기치 않은 동작을 초래할 수 있습니다. 또한 특정 상황에서 매우 유용 할 수 있습니다. 예를 들어 : FRAPS 는이를 사용하여 FPS 카운터를 표시 할 창을 결정합니다.
후크 체인은 각 함수가 다음 함수를 호출하는 함수 세트입니다. 후크 체인에서 중요한 것은 프로그래머가 런타임에 체인에 다른 기능을 추가 할 수 있다는 것입니다. 이를 수행하는 한 가지 방법은 체인에서 첫 번째 기능의 주소가 유지되는 알려진 위치를 찾는 것입니다. 그런 다음 해당 함수 포인터의 값을 저장하고 후크 체인에 삽입하려는 함수의 주소로 초기 주소의 값을 덮어 씁니다. 그런 다음 함수가 호출되고 비즈니스가 수행되며 체인에서 다음 함수를 호출합니다 (달리 결정하지 않는 한). 당연히 직접 작성에서 메모리에 이르기까지 Ruby 또는 Python과 같은 언어의 메타 프로그래밍 기능을 사용하는 것까지 후크 체인을 작성하는 여러 가지 방법이 있습니다.
후크 체인의 예는 MS Windows 응용 프로그램이 메시지를 처리하는 방식입니다. 처리 체인의 각 함수는 메시지를 처리하거나 체인의 다음 함수로 보냅니다.
Drupal 컨텐츠 관리 시스템에서 '후크'는 비교적 구체적인 의미를 갖습니다. 컨텐츠 작성 또는 사용자 로그인과 같은 내부 이벤트가 발생하면 모듈은 특수한 "후크"기능을 구현하여 이벤트에 응답 할 수 있습니다. 예를 들어, 사용자 로그인 이벤트의 이름 지정 규칙 ([your-plugin-name] _user_login ())을 통해 수행됩니다.
이 규칙으로 인해 기본 이벤트는 "후크"라고하며 Drupal의 API 설명서에서 "hook_user_login"및 "hook_user_authenticate ()"와 같은 이름으로 나타납니다.