__free_hook 没有按预期挂钩
__free_hook doesn't hook as expected
来自this Whosebug 问题的选定答案。我决定也记录免费电话。我做了一个日志 free
。但是对 free
的调用似乎没有正确输出。
#include <malloc.h>
static void *(*old_malloc_hook)(size_t, const void *);
static void *new_malloc_hook(size_t size, const void *caller) {
void *mem;
__malloc_hook = old_malloc_hook;
mem = malloc(size);
fprintf(stderr, "%p: malloc(%zu) = %p\n", caller, size, mem);
__malloc_hook = new_malloc_hook;
return mem;
}
static void init_malloc_hooks(void) {
old_malloc_hook = __malloc_hook;
__malloc_hook = new_malloc_hook;
}
void (*volatile __malloc_initialize_hook)(void) = init_malloc_hooks;
static void (*old_free_hook)(void*, const void *);
static void new_free_hook(void* p, const void *caller) {
__free_hook = old_free_hook;
free(p);
fprintf(stderr, "%p: free(%p)\n", caller, p);
__free_hook = new_free_hook;
}
static void init_free_hooks(void) {
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}
void (*volatile __free_initialize_hook)(void) = init_free_hooks;
_free_initialize_hook
从未调用过。您需要删除
static void init_free_hooks(void) {
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}
void (*volatile __free_initialize_hook)(void) = init_free_hooks;
并在 init_malloc_hooks 中初始化两个挂钩:
static void init_malloc_hooks(void) {
old_malloc_hook = __malloc_hook;
__malloc_hook = new_malloc_hook;
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}
来自this Whosebug 问题的选定答案。我决定也记录免费电话。我做了一个日志 free
。但是对 free
的调用似乎没有正确输出。
#include <malloc.h>
static void *(*old_malloc_hook)(size_t, const void *);
static void *new_malloc_hook(size_t size, const void *caller) {
void *mem;
__malloc_hook = old_malloc_hook;
mem = malloc(size);
fprintf(stderr, "%p: malloc(%zu) = %p\n", caller, size, mem);
__malloc_hook = new_malloc_hook;
return mem;
}
static void init_malloc_hooks(void) {
old_malloc_hook = __malloc_hook;
__malloc_hook = new_malloc_hook;
}
void (*volatile __malloc_initialize_hook)(void) = init_malloc_hooks;
static void (*old_free_hook)(void*, const void *);
static void new_free_hook(void* p, const void *caller) {
__free_hook = old_free_hook;
free(p);
fprintf(stderr, "%p: free(%p)\n", caller, p);
__free_hook = new_free_hook;
}
static void init_free_hooks(void) {
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}
void (*volatile __free_initialize_hook)(void) = init_free_hooks;
_free_initialize_hook
从未调用过。您需要删除
static void init_free_hooks(void) {
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}
void (*volatile __free_initialize_hook)(void) = init_free_hooks;
并在 init_malloc_hooks 中初始化两个挂钩:
static void init_malloc_hooks(void) {
old_malloc_hook = __malloc_hook;
__malloc_hook = new_malloc_hook;
old_free_hook = __free_hook;
__free_hook = new_free_hook;
}