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

Wrap malloc but only for some of input files (object and lib)

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

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

理想的解决方案是我可以使用 --wrap linker 选项但仅将其应用于某些输入文件。但也欢迎其他解决方案。

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

有什么想法吗?

谢谢

分两步尝试 link。

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

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

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

如果您只需要为某些模块或部分模块更改 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