__malloc_hook
这是一个在调用malloc
时总是会被调用的函数。看源码:
__libc_malloc (size_t bytes)
{
mstate ar_ptr;
void *victim;
void *(*hook) (size_t, const void *)
= atomic_forced_read (__malloc_hook);
if (__builtin_expect (hook != NULL, 0))
return (*hook)(bytes, RETURN_ADDRESS (0));
......
}
malloc
在调用之前首先会检查__malloc_hook
这个函数是否为空。不为空则调用他。
__malloc_hook
的初始值是malloc_hook_init
static Void_t*
#if __STD_C
malloc_hook_ini(size_t sz, const __malloc_ptr_t caller)
#else
malloc_hook_ini(sz, caller)
size_t sz; const __malloc_ptr_t caller;
#endif
{
__malloc_hook = NULL;
ptmalloc_init();
return __libc_malloc(sz);
}
利用
在CTF中,如果可以覆盖掉__malloc_hook
的值,则可以控制程序流程了。
但是怎么找这个值,我目前只做到了一道相关的静态链接的题目。所以可以直接看到malloc
的源码,第一个出现的判断中就是__malloc_hook
的地址。