c -包装malloc,但只适用于一些输入文件(object和lib)



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

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

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

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

任何想法?

谢谢

试试分两步链接。

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

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

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

如果您只需要更改一些模块的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

相关内容

  • 没有找到相关文章

最新更新