Las*_*lan 10 c c++ malloc overriding
我试图想出一种在visual c ++(2005)中全局覆盖malloc和相关函数的方法.我的设置是一个带有静态链接的运行时库的DLL,它包含我自己的c ++代码,外部c ++和c代码.我想要完成的是允许dll的用户设置他们自己的内存分配函数的实现.
我不能使用的解决方案:
我不关心的事情
我能想出的最合理的解决方案是以某种方式干扰链接过程并确保我自己的malloc被链接而不是标准的,最好是我希望能够使用旧的malloc函数作为默认值.
在谷歌性能工具中,似乎他们在运行时手动修补函数的代码,以允许在调用原始函数之前调用钩子函数.这真的是最好的方法吗?
我也渴望为此找到一个简洁的解决方案.我们为多个平台编译,所以在非windows窗口我们可以使用的东西 - 愉快地包裹.我们只需要创建替换功能,它们都可以正常运行而不会出现任何错误或黑客攻击.
在窗口方面,我们覆盖malloc调用,但随后用于/FORCE:MULTIPLE处理链接器错误.它工作,记忆功能被调用,一切都被跟踪,但感觉就像一个黑客.
来自MSDN:
A file created with this option may not run as expected. The linker will not link incrementally when the /FORCE option is specified.
它不仅感觉像是黑客,还会杀死编辑并继续进行.
该/FORCE:MULTIPLE选项可能会解决您的问题,但我并不是说它是一种治疗方法,我仍然试图找到它.
:D
以下内容适用于Linux,但也可能适用于Win的Visual C++.
Malloc功能由系统库glibc提供.默认情况下,可执行文件与其相关联.
运行程序时,动态加载程序会注意到可执行文件需要malloc函数并查找提供它的第一个库.
由于glibc(默认情况下)是该列表中的最后一个,因此找到的库可能不是glibc.
除非你将glibc静态链接到可执行文件中,否则显而易见的解决方案是将可执行文件链接到提供自己的malloc的库,并确保它确实覆盖了系统的.