首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Malloc Hooks

使用Malloc Hooks
EN

Stack Overflow用户
提问于 2008-11-06 18:03:02
回答 5查看 10K关注 0票数 6

我正在尝试使用malloc钩子来创建一个自定义函数my_malloc()。在我的主程序中,当我调用malloc()时,我希望它调用my_malloc()。有没有人能给我一个用C++实现这一点的例子

EN

回答 5

Stack Overflow用户

发布于 2008-11-06 18:06:07

你看过这里吗?http://www.gnu.org/software/libtool/manual/libc/Hooks-for-Malloc.html

票数 6
EN

Stack Overflow用户

发布于 2008-11-06 18:11:04

根据http://www.gnu.org/software/libtool/manual/libc/Hooks-for-Malloc.html的说法,这里是如何使用GCC库来做到这一点的。

代码语言:javascript
复制
/* Prototypes for __malloc_hook, __free_hook */
 #include <malloc.h>

 /* Prototypes for our hooks.  */
 static void my_init_hook (void);
 static void *my_malloc_hook (size_t, const void *);
 static void my_free_hook (void*, const void *);

 /* Override initializing hook from the C library. */
 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;
   /* Restore all old hooks */
   __malloc_hook = old_malloc_hook;
   __free_hook = old_free_hook;
   /* Call recursively */
   result = malloc (size);
   /* Save underlying hooks */
   old_malloc_hook = __malloc_hook;
   old_free_hook = __free_hook;
   /* printf might call malloc, so protect it too. */
   printf ("malloc (%u) returns %p\n", (unsigned int) size, result);
   /* Restore our own hooks */
   __malloc_hook = my_malloc_hook;
   __free_hook = my_free_hook;
   return result;
 }

 static void
 my_free_hook (void *ptr, const void *caller)
 {
   /* Restore all old hooks */
   __malloc_hook = old_malloc_hook;
   __free_hook = old_free_hook;
   /* Call recursively */
   free (ptr);
   /* Save underlying hooks */
   old_malloc_hook = __malloc_hook;
   old_free_hook = __free_hook;
   /* printf might call free, so protect it too. */
   printf ("freed pointer %p\n", ptr);
   /* Restore our own hooks */
   __malloc_hook = my_malloc_hook;
   __free_hook = my_free_hook;
 }

 main ()
 {
   ...
 }
票数 6
EN

Stack Overflow用户

发布于 2008-11-06 18:08:51

如果您的函数直接调用sbrk,您可以简单地调用它malloc,并确保它在库的malloc之前被链接。这适用于所有Unix类型的OSes。有关窗口,请参阅Is there a way to redefine malloc at link time on Windows?

如果您的函数是库的malloc的包装器,那么Alex的#define建议将会起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/269659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档