包装 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
我需要包装对 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