関数割り込みを使用して malloc と free を監視しているときに、小さな問題に遭遇しました。
ただ malloc の関数挿入を実行すると、期待どおりに動作します。ただし、無料で挿入しようとすると、ループに陥ります。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
よろしくお願いします
ニーフィケン