我在函数“ A”中有断点,但是函数“ B”和“ C”可以调用“ A”。当遇到断点时,我想首先知道什么叫“ A”。是否有类似函数调用堆栈的内容?

我已经找到了'debugger-> tracing-> stack trace'选项,但是当我在断点被击中时按它时,它仅显示此内容,这并没有使任何意义:


评论

这可能意味着尚未正确设置堆栈框架,因此Ida感到困惑。有时它有助于单步执行一些说明。另外,如果确定您在函数的第一条指令中,请检查堆栈的顶部([esp / rsp]处的dword,具体取决于您使用的是32位还是64位)。退货地址。如果您的汇编代码不是由编译器生成的,并且使用非标准方式来处理堆栈,则这可能是唯一的方式。

#1 楼

做这样的函数跟踪:


在主函数和目标函数处设置断点
在进程停止时开始调试
:转到调试器->跟踪->函数跟踪
继续执行过程
,一旦再次停止该进程,请转到调试器->跟踪->跟踪窗口并检查所需信息。

如果这样不能提供所需的信息,请尝试基本块或指令跟踪。即使在识别功能/堆栈框架方面存在问题,此方法也可以使用...

有关跟踪功能的更多信息,请参见此处:有关跟踪的hex-rays教程

评论


嗨@ user2545831!如果此答案解决了您的问题,请考虑通过单击对勾接受它。这向更广泛的社区表明您已经找到了解决方案,并为答题者和您自己赢得了一定声誉。如果您对答案还有其他疑问,请随时询问。

– gogo_gorilla
15年2月27日在8:45