我正在为我的https://github.com/mikelsv/msvcore2库编写内存管理器。使用拦截函数:malloc()
,realloc()
,free()
。
问题:在openssl库(或其他任何)中调用的my_malloc()中获取堆栈帧。
示例堆栈:RSA_generate_key() -> BN_new -> CRYPTO_zalloc -> my_malloc()
。
解。
CaptureStackBackTrace()
。返回短筹码,只有" CRYPTO_zalloc"。不好。
__asm {mov prev,ebp}的变体对我不起作用。
StackWalk()
- 工作。但是,非常慢。
如何尽快在静态库中获取堆栈帧?
我使用的是MSVS 2010& 2012。
哦,等等!我的GetStackTypeInfo()
只需要第4帧。快速修复:if(CaptureStackBackTrace() have 4th frame){ use it; } else StackWalk()
。它的工作版本更好。但是,也很慢。
我的记忆管理员https://github.com/mikelsv/memman。内存控制:https://github.com/mikelsv/msvcore2/blob/master/define/memcon.h,获取堆栈信息:GetStackTypeInfo() - https://github.com/mikelsv/msvcore2/blob/master/define/memcon.h#L738。