给予eip时访问ebp

时间:2010-11-15 16:40:24

标签: c unix

我正在尝试开发运行时堆栈跟踪器。我有一个函数,只要程序被跟踪segfaults返回EIP地址。我怎样才能回到当前函数的ebp(正在观察的程序崩溃的那个),以便我可以开始跟踪?

2 个答案:

答案 0 :(得分:5)

无法将指令指针转换为堆栈帧指针。可以使用不同的堆栈地址多次(甚至递归地)调用相同的函数;这就是拥有调用堆栈的重点。如果您有崩溃转储文件(核心文件等),它应该包含所有寄存器的转储。如果你想要寄存器值,你必须从这里读取它们。

答案 1 :(得分:3)

段错误时的当前ebp和esp(以及所有其他寄存器)在ucontext中可用,它将作为第三个参数传递给信号处理程序。 ucontext中操作系统和CPU特定的详细信息。

相关问题