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() 함수가 호출될 때) 수행하는 함수들을 등록하는 함수라고 보면 된다.
나중에 등록한 함수가 먼저 실행된다. 이러한 특성을 공격에 이용할 수 있다.
'system' 카테고리의 다른 글
[how2heap translation] house_of_force.c (0) | 2017.05.03 |
---|---|
[how2heap translation] house_of_spirit.c (1) | 2017.04.22 |
[how2heap translation] unsafe_unlink.c (0) | 2017.03.03 |
[how2heap translation] unsorted_bin_attack.c (0) | 2017.02.07 |
[how2heap translation] fastbin_dup_into_stack.c (0) | 2017.01.11 |