加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – -Wl,-wrap = symbol对共享库不起作用

发布时间:2020-12-16 07:10:59 所属栏目:百科 来源:网络整理
导读:我尝试使用GNU链接器功能“-wrap = symbol”来拦截大型应用程序对malloc()的所有调用.该应用程序正在使用一大堆共享库. 链接器阶段如下所示: g -Wl,-wrap = malloc -o samegame .obj / main.o .obj / qrc_samegame.o -lQt5Quick -lQt5Qml -lQt5Network -lQt
我尝试使用GNU链接器功能“-wrap = symbol”来拦截大型应用程序对malloc()的所有调用.该应用程序正在使用一大堆共享库.

链接器阶段如下所示:

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调用未被挂钩.

难道我做错了什么?

解决方法

您的解决方案不适用于共享库.

但你可以这样做:

将以下代码放在名为malloc.c的文件中

#include <stdlib.h>
#include <stdio.h>

void *__libc_malloc(size_t size);

void *malloc(size_t size)
{
    printf("malloc'ing %zu bytesn",size);
    return __libc_malloc(size);
}

编译malloc.c:gcc malloc.c -shared -fPIC -o malloc.so

然后运行:

$LD_PRELOAD='./malloc.so' ls

malloc'ing 568 bytes
malloc'ing 120 bytes
malloc'ing 5 bytes
malloc'ing 120 bytes
malloc'ing 12 bytes
malloc'ing 776 bytes
malloc'ing 112 bytes
malloc'ing 952 bytes
malloc'ing 216 bytes
malloc'ing 432 bytes
malloc'ing 104 bytes
malloc'ing 88 bytes
malloc'ing 120 bytes
malloc'ing 168 bytes
malloc'ing 104 bytes
malloc'ing 80 bytes
malloc'ing 192 bytes
...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读