【发布时间】:2014-06-10 09:10:32
【问题描述】:
我有一个调用函数的库:例如 malloc。 我在我的应用程序中使用该库。我希望库不调用 malloc,而是每次调用 malloc 时我都定义了“mymalloc”的函数。 简而言之,我想使用具有不同名称的 my 符号来解析 malloc 符号。
我已经尝试过这个链接器选项:-Wl,--defsym=malloc=mymalloc
它有效,但仅适用于应用程序中的调用 即:程序中对 malloc 的每次调用都会解析为 mymalloc,但库中的调用仍会调用 stdlibc malloc。
非常感谢, 大卫
【问题讨论】:
-
可行性取决于它是编译库还是仅标头库。这是什么?
-
为什么不能直接调用你的函数
malloc?还是写一个malloc委托给mymalloc?您可能还需要替换calloc、realloc、memalign和free(根据sourceware.org/ml/libc-help/2012-04/msg00060.html) -
尝试查看您的
malloc库的实现。一些库允许您挂钩内存分配并提供您自己的自定义分配器。如果您的支持这一点,您可以获得所需的结果,而无需在链接器中进行任何黑客攻击。 :linux.die.net/man/3/malloc_hook