如何从SEH异常生成堆栈跟踪

时间:2014-11-06 21:48:34

标签: c++ windows stack-trace seh

我使用Win32 SEH捕获异常:

try
{
    // illegal operation that causes access violation
}
__except( seh_filter_func(GetExceptionInformation()) )
{
    // abort
}

过滤器功能如下所示:

int seh_filter_func(EXCEPTION_POINTERS *xp)
{
    // log EIP, other registers etc. to file

    return 1;
}

到目前为止这是有效的,xp->ContextRecord->Eip中的值告诉我哪个函数导致了访问冲突(实际上是 - ntdll.dll!RtlEnterCriticalSection,EDX的值告诉我这个函数是用伪造的参数调用的) 。

但是,在许多地方调用此函数,包括来自其他WinAPI函数,因此我仍然不知道哪个代码负责使用伪造的参数调用此函数。

根据EXCEPTION_POINTERS中的信息或其他方式,是否有任何代码可用于生成导致EIP现在的函数调用链的跟踪? (在外部调试器下运行程序不是一种选择)。

只是EIP值可以,因为我可以在链接器映射和符号表中查找它们,但是如果有办法自动将它们映射到符号名称甚至更好。

我正在为这个项目使用C ++ Builder 2006,尽管MSVC ++解决方案可能仍在使用。

0 个答案:

没有答案