gpt4 book ai didi

c - 函数插入仅适用于 malloc 不是免费的

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:13 24 4
gpt4 key购买 nike

我在使用函数插入监控 malloc 和 free 时遇到了一个小问题。

当只为 malloc 执行函数插入时,它按预期工作。但是,当尝试插入 free 时,它​​最终会陷入循环;我好像 free 被递归调用了,但我只是不知道为什么。

这是 malloc 和 free 函数的代码。 (mod_malloc_free.c)

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

void* malloc(size_t size) {

static void* (*real_malloc)(size_t) = NULL;

printf("%s\n", "inside shared malloc");

if(!real_malloc)
real_malloc = dlsym(RTLD_NEXT, "malloc");

void * p = real_malloc(size);

printf("malloc(%d) = %p\n",size, p );

printf("%s\n", "returning from shared malloc");

return p;

}

void free(void* ap ) {

static void (*real_free)(void*) = NULL;

printf("inside shared free...\n");

if(!real_free)
real_free = dlsym(RTLD_NEXT, "free");

printf("free = %p\n", ap);

real_free(ap);

}

主要包括:

#include <stdio.h>
#include <malloc.h>

int main(void) {

void * p = malloc(123);

printf("p = %p\n",p );

free(p);

return 0;

编译为:

gcc -shared -ldl -fPIC mod_malloc_free.c -o libcustom.so

gcc -o smallMain -Wall smallMain.c

LD_PRELOAD=./libcustom.so ./smallMain

最好的问候

尼菲肯

最佳答案

glibc 提供带有 __ 前缀的真实符号(不是弱的)。所以尝试查找符号 __malloc__free

并且只是为了防止递归,不要使用 printf() 或任何其他可能需要在包装器内分配内存的函数。

关于c - 函数插入仅适用于 malloc 不是免费的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999090/

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