我正在尝试开发一个运行时堆栈跟踪器。我有一个函数,每当被跟踪的程序出现段错误时,它都会返回EIP地址。我怎样才能回到当前函数的ebp (被观察的程序崩溃的那个函数),这样我才能开始追踪?
发布于 2010-11-16 00:54:29
无法将指令指针转换为堆栈帧指针。可以使用不同的堆栈地址多次(甚至是递归地)调用相同的函数;这就是拥有调用堆栈的意义所在。如果您有崩溃转储文件(核心文件等)它应该包含所有寄存器的转储。如果你想要寄存器值,你必须从这里读取它们。
发布于 2010-11-16 03:09:36
在段错误发生时的当前ebp和esp (以及所有其他寄存器)在ucontext中可用,ucontext作为第三个参数传递给信号处理程序。ucontext中内容所在位置的详细信息取决于操作系统和CPU。
https://stackoverflow.com/questions/4186653
复制相似问题