C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – -Wl,-wrap = symbol对共享库不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用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 *R_770_11845@alloc(size_t sizE)
{
    printf("malloc'ing %zu bytes\n",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
...

大佬总结

以上是大佬教程为你收集整理的c – -Wl,-wrap = symbol对共享库不起作用全部内容,希望文章能够帮你解决c – -Wl,-wrap = symbol对共享库不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。