정의 – 호출된 함수를 알려주어, 다른 프로그램 또는 다른 모듈에서 함수를 호출 하게 하는 방법 일반적으로 운영체제(OS)가 호출할 어플리케이션의 함수를 지정해 특정한 사건 또는 메시지가 발발 했을 때 호출되도록 지정 할 수 있다. 이런 함수를 콜백 함수라고 한다.
즉 사용자가 필요할 때 호출해서 쓰는 함수가 아닌 어떤 이벤트가 발생 했을 때 사용자에게 알려주는 역할을 하고 있다. 호출 되는 것 이다. 어떤 이벤트에 의해 해당 함수를 호출 하는 것 이다.
함수호출과 CallBack함수의 가장 큰 차이점은 제어권에 있다.
호출자가 -> 피호출자 호출 (일반적인 함수 흐름)
피호출자 -> 호출자 호출 (callback의 함수 흐름)
계속적으로 요청하는것과, 무슨일(이벤트)가 벌어졌을 때 요청되어지는것의 차이
마우스 클릭을 예로 들면은 왼쪽클릭을 했는지를 계속해서 확인하는 것(user 함수),
왼쪽 클릭이 되었을때 확인 되어지는것(callback 함수)
Callback함수 사용방법
Dll에서 User Program의 함수를 쓰고 싶을 때 특정 파라메터를 가지고 User Program의 함수를 호출 하게 한다.
1. Use Program 함수에서 함수1을 정의 한다.
2. 2 DLL에 있는 레지스터 콜백 함수에다가 이 함수의 인자를 넘겨주면은 callback이 등록된다.
3. DLL함수에서는 전역변수 하나를 배정해서, 인자값을 포인터로 넣어 준다.
4. 그 뒤 callbackFunc를 실행하면 지정한 함수가 실행이 된다.
Callback함수의 인자값들은 훅 프로시저 마다 다르다.
훅 프로시저들은 글로벌과 로컬로 나뉘어지며, 둘다 가능한 것이 있고 아닌것들이 있다.
글로벌&로컬 가능 글로벌만 가능
둘의 큰 차이점
글로벌 훅 : 글로벌 훅을 위해서는 훅 프로시저는 어플리케이션 영역이 아닌 DLL이 적재되는 영역에 있어야 한다.
로컬 훅 : 특정 프로세스만을 후킹하므로 어플리케이션 영역이든 DLL영역이든 별 상관이 없다.
출처 : Windows Message Hooking
http://blog.naver.com/i2proda?Redirect=Log&logNo=150019571374
'CAT-Security > 미분류' 카테고리의 다른 글
AsPack MUP 정리 (2) | 2013.04.05 |
---|---|
[api]모달과 모달리스의 차이 (0) | 2013.03.25 |
Code injection (1) - Basic (2) | 2013.01.02 |
Python으로 레이싱 갤러리 사진 긁어 오기 (1) | 2012.12.20 |
python 공부 자료 (0) | 2012.12.20 |