包装malloc但仅用于某些输入文件(对象和lib)

时间:2015-07-29 11:39:10

标签: c unix memory-management linker malloc

我需要将调用包装到malloc,从我自己的池中提供内存。 但仅适用于我自己的目标文件和一些外部库。 其他库应该可以访问真正的malloc。 我使用静态链接,只链接到静态库(.a档案)。

我使用--wrap = malloc选项来"拦截"调用malloc,但它使所有输入文件中的所有代码都使用此malloc(__wrap_malloc)。

理想的解决方案是,如果我可以使用--wrap链接器选项,但只将其应用于某些输入文件。但也欢迎其他解决方案。

如果需要说明问题,我可以提供虚拟示例代码(不是那么小)。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

尝试分两步进行链接。

第一阶段:ld -r -o libwrapped.a --wrap=malloc myobj1.o myobj2.o -lsomelib

第二阶段:ld -o final -lwrapped -lsomeotherlib

-r选项使第一个文件(wrapped)可重定位,通常称为部分链接。基本上你创建了一个包含你想要包装的所有对象的库,然后将它与你不想包装的对象链接到最终对象中。

答案 1 :(得分:0)

如果您只需要为某些模块甚至部分模块更改malloc,我建议使用简单的#define。这允许将新malloc的使用限制在同一模块的某些部分:

...
#define malloc(x)  MyMalloc(x)
...    //From here on will be used the new malloc MyMalloc
#undef malloc
...    //From here on will be used the standard malloc