if (_dl_addr (caller, &info, NULL, NULL)){char *buf = (char *) ""; if (info.dli_sname != NULL) { size_t len = strlen (info.dli_sname); buf = alloca (len + 6 + 2 * sizeof (void *)); buf[0] = '('; __stpcpy (_fitoa (caller >= (const __ptr_t) info.dli_saddr ? caller - (const __ptr_t) info.dli_saddr : (const __ptr_t) info.dli_saddr - caller, __stpcpy (__mempcpy (buf + 1, info.dli_sname, len), caller >= (__ptr_t) info.dli_saddr ? "+0x" : "-0x"), 16, 0), ")"); } fprintf (mallstream, "@ %s%s%s[%p] ", info.dli_fname ?: "", info.dli_fname ? ":" : "", buf, caller); } |
#include <malloc.h>static void* (* old_malloc_hook) (size_t,const void *);static void (* old_free_hook)(void *,const void *);static void my_init_hook(void);static void* my_malloc_hook(size_t,const void*);static void my_free_hook(void*,const void *);void(*__malloc_initialize_hook)(void) = my_init_hook;static void my_init_hook(void){ old_malloc_hook = __malloc_hook; old_free_hook = __free_hook; __malloc_hook = my_malloc_hook; __free_hook = my_free_hook;}static void* my_malloc_hook(size_t size,const void *caller){ void *result; __malloc_hook = old_malloc_hook; result = malloc(size); old_malloc_hook = __malloc_hook; printf("@%p + %p %#lx\n",caller,result,(unsigned long int)size); __malloc_hook = my_malloc_hook; return result;}static void my_free_hook(void *ptr,const void *caller){ __free_hook = old_free_hook; free(ptr); old_free_hook = __free_hook; printf("@%p - %p\n",caller,ptr); __free_hook = my_free_hook;} |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |