我正在尝试开发运行时堆栈跟踪器。我有一个函数,只要程序被跟踪segfaults返回EIP地址。我怎样才能回到当前函数的ebp(正在观察的程序崩溃的那个),以便我可以开始跟踪?
答案 0 :(得分:5)
无法将指令指针转换为堆栈帧指针。可以使用不同的堆栈地址多次(甚至递归地)调用相同的函数;这就是拥有调用堆栈的重点。如果您有崩溃转储文件(核心文件等),它应该包含所有寄存器的转储。如果你想要寄存器值,你必须从这里读取它们。
答案 1 :(得分:3)
段错误时的当前ebp和esp(以及所有其他寄存器)在ucontext中可用,它将作为第三个参数传递给信号处理程序。 ucontext中操作系统和CPU特定的详细信息。