본문 바로가기

system

c library hook, atexit

Memory Allocation Hooks

The GNU C Library lets you modify the behavior of malloc, realloc, and free by specifying appropriate hook functions. You can use these hooks to help you debug programs that use dynamic memory allocation

void *(*__malloc_hook) (size_t SIZE, const void *CALLER);

void *(*__realloc_hook) (void *PTR, size_t SIZE, const void *CALLER);

void (*__free_hook) (void *PTR, const void *CALLER);

 

보통 hook 은 malloc() 함수를 사용하여 프로그램이 메모리를 할당받거나, free() 함수를 사용하여 메모리를 해체하는 동적 메모리 할당과 해체를 사용하는 프로그램의 디버깅을 위해 사용한다.

몇 가지 hook 이 있지만 가장 일반적인 것은 __malloc_hook, __realloc_hook, __free_hook 이다.

보통 NULL 로 지정되지만 우리가 작성한 코드에 대한 포인터로 그것들을 덮어쓰자마자 우리의 코드는 malloc, realloc, free가 호출될 때 실행될 것이다.

이것은 hook 들이 실제 함수가 실행되기 전에 호출될 때 디버그 hook 로 사용되기 때문이다.

 

 

atexit

void atexit(void (*func)(void));

exit handler 를 등록하는 함수이다. 프로그램이 종료될 때(exit() 함수가 호출될 때) 수행하는 함수들을 등록하는 함수라고 보면 된다.

나중에 등록한 함수가 먼저 실행된다. 이러한 특성을 공격에 이용할 수 있다.