gpt4 book ai didi

在 C 中为 malloc 和 free 创建一个包装函数

转载 作者:太空狗 更新时间:2023-10-29 16:20:32 27 4
gpt4 key购买 nike

我正在尝试在 C 中为 freemalloc 创建包装函数,以帮助通知我内存泄漏。有谁知道如何声明这些函数以便当我调用 malloc()free() 时它会调用我的自定义函数而不是标准库函数?

最佳答案

您有几个选择:

  1. GLIBC 特定的解决方案(主要是 Linux)。如果您的编译环境是 glibcgcc,首选方法是使用 malloc hooks .它不仅允许您指定自定义 mallocfree,而且还会通过堆栈上的返回地址识别调用者。

  2. POSIX 特定的解决方案。mallocfree 定义为可执行文件中原始分配例程的包装器,这将“覆盖”来自 libc 的版本。在包装器中,您可以调用原始的 malloc 实现,您可以使用 dlsym 查找它。带有 RTLD_NEXT 句柄。您定义包装函数的应用程序或库需要使用 -ldl 进行链接。

    #define _GNU_SOURCE
    #include <dlfcn.h>
    #include <stdio.h>

    void* malloc(size_t sz)
    {
    void *(*libc_malloc)(size_t) = dlsym(RTLD_NEXT, "malloc");
    printf("malloc\n");
    return libc_malloc(sz);
    }

    void free(void *p)
    {
    void (*libc_free)(void*) = dlsym(RTLD_NEXT, "free");
    printf("free\n");
    libc_free(p);
    }

    int main()
    {
    free(malloc(10));
    return 0;
    }
  3. 特定于 Linux。您可以通过在 LD_PRELOAD 环境变量中指定它们,以非侵入方式覆盖动态库中的函数。

    LD_PRELOAD=mymalloc.so ./exe
  4. 特定于 Mac OSX。

    与 Linux 相同,除了您将使用 DYLD_INSERT_LIBRARIES 环境变量。

关于在 C 中为 malloc 和 free 创建一个包装函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/262439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com