此问题基于Very slow stack frames in static library。
如何获得此堆栈跟踪的唯一标识?它需要我的记忆管理员:https://github.com/mikelsv/memman。
拦截来自openssl库(可能还有其他库)的调用的问题。
问题:
Type *tel = FindType(prevous stack name); tel->allocate count ++;
Stack *sel = FindStack(uniq stack id); sel->allocate count ++;
当前的解决方案:
使用CaptureStackBackTrace()
其他StackWalk()
。但是,CaptureStackBackTrace()
- 不要显示所有堆叠帧StackWalk()
- 非常慢。
如何获得更快的唯一标识符堆栈?
当前代码: https://github.com/mikelsv/msvcore2/blob/master/define/memcon.h
GetStackTypeInfo();
StackCrc();
- 快速,但计算短筹码。示例:第一个堆栈帧CRYPTO_realloc
。此问题:"any calls" -> CRYPTO_realloc()
只有一个唯一ID。可能的解决方案:
RtlCaptureContext()
来获取堆栈帧的唯一ID吗?如何使用ebp?
unsigned long prev;
unsigned long addr = 1;
int eframes = 0;
__asm { mov prev, ebp };
while(addr != 0){
addr = ((unsigned long *)prev)[1];
prev = ((unsigned long *)prev)[0];
stack[eframes] = (void*)addr;
eframes ++;
}
这里的问题是:CRYPTO_function_name()调用我的malloc()。在进程中addr == 32768,prev == 2;下一循环中的异常。结果为CaptureStackBackTrace()。如何获得以前的堆栈帧?