我想以这样一种方式编写一个共享库,以便可以将它的内存使用与它所链接的应用程序隔离开来。也就是说,如果共享库,让我们称之为libmemory.so
,调用malloc
,我想将该内存维护在一个单独的堆中,而不是用于为malloc
应用程序中的调用提供服务的堆。这个问题不是关于编写内存分配器,而是关于将库和应用程序链接和加载在一起。
到目前为止,我一直在尝试函数插入、符号可见性和链接技巧的组合。到目前为止,由于一件事,我无法做到这一点:标准库。我找不到一种方法来区分对内部使用的标准库的调用malloc
与libmemory.so
应用程序的调用。这会导致一个问题,因为此后任何标准库的使用都会libmemory.so
污染应用程序堆。
我目前的策略是将malloc
共享库中的定义插入为隐藏符号。这工作得很好,所有库代码都按预期工作,当然,在运行时动态加载的标准库除外。自然,我一直在尝试找到一种静态嵌入标准库用法的方法,以便它在编译时使用插入malloc
的 in 。libmemory.so
我已经尝试过-static-libgcc
但-static-libstdc++
没有成功(无论如何,这似乎是不鼓励的)。这是正确的答案吗?
做什么?
Ps,进一步阅读总是值得赞赏的,并且在问题标记前面的帮助会很好。