有没有办法覆盖C语言中的malloc / free函数?

Suj*_*ane 5 c malloc free

有没有办法从自身的C应用程序挂接malloc / free函数调用?

Cli*_*ord 6

malloc()free()在标准库中定义;链接代码时,链接器将仅在库中搜索尚未被较早遇到的目标代码解析的符号,并且编译生成的目标文件始终在任何库之前链接。

因此,您只需在自己的代码中定义库函数即可覆盖任何库函数,确保它具有正确的签名(相同的名称、相同的参数数量和类型以及相同的返回类型)。


R S*_*ahu 5

是的你可以。这是一个示例程序。它使用 gcc 4.8.2 编译和构建,但没有做任何有用的事情,因为实现不起作用。

#include <stdlib.h>

int main()
{
   int* ip = malloc(sizeof(int));
   double* dp = malloc(sizeof(double));

   free(ip);
   free(dp);
}

void* malloc(size_t s)
{
   return NULL;
}

void free(void* p)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 对于 GNU/linux,glibc 还导出 `__libc_malloc` 等,因此您可以从 malloc 中调用它们,并且仍然使用 glibc 提供的 malloc 并根据需要添加钩子逻辑。但不可移植,并且您需要“dlsym”来获得更便携的解决方案 (3认同)

Pra*_*ari -1

C 不提供函数重载。所以你不能覆盖。

  • 超载与接管无关。 (4认同)
  • 重载与 C 或 C++ 中的覆盖不同。您只需定义它就可以覆盖任何库代码。 (2认同)