C -Wl,-wrap=符号不';我不能为共享库工作
我尝试使用GNU链接器特性“-wrap=symbol”拦截大型应用程序对malloc()的所有调用。该应用程序使用了一大堆共享库 链接器阶段如下所示:C -Wl,-wrap=符号不';我不能为共享库工作,c,linux,gcc,linker,ld,C,Linux,Gcc,Linker,Ld,我尝试使用GNU链接器特性“-wrap=symbol”拦截大型应用程序对malloc()的所有调用。该应用程序使用了一大堆共享库 链接器阶段如下所示: extern "C" { void * __real_malloc(size_t c); void * __wrap_malloc(size_t c) { printf("my wrapper"); return __real_malloc (c); } } g++-Wl,-wrap=malloc-o samegame.obj
extern "C" {
void *
__real_malloc(size_t c);
void *
__wrap_malloc(size_t c)
{
printf("my wrapper");
return __real_malloc (c);
}
}
g++-Wl,-wrap=malloc-o samegame.obj/main.o.obj/qrc_samegame.o-lQt5Quick-lQt5Qml-lQt5Network-lQt5Gui-lQt5Core-lGL-lpthread
我的包装是这样的:
extern "C" {
void *
__real_malloc(size_t c);
void *
__wrap_malloc(size_t c)
{
printf("my wrapper");
return __real_malloc (c);
}
}
我的问题是,我看到我的包装被直接从我的应用程序调用malloc。在其中一个共享库中完成的malloc调用没有挂钩
我做错什么了吗?您的解决方案无法与共享库一起使用 但你可以这样做:
extern "C" {
void *
__real_malloc(size_t c);
void *
__wrap_malloc(size_t c)
{
printf("my wrapper");
return __real_malloc (c);
}
}
将以下代码放入名为malloc.c
#include <stdlib.h>
#include <stdio.h>
void *__libc_malloc(size_t size);
void *malloc(size_t size)
{
printf("malloc'ing %zu bytes\n", size);
return __libc_malloc(size);
}
这可能只适用于静态库。似乎如此。这是我问题的主要方向。我需要一个用于
open
,而\uu libc\u open
不起作用。我发现包括malloc在内的大多数函数都可以用两个初始的Undercroedint\uu open(const char*pathname,int标志)调用代码>