是否可以强制 IDA 确认异常的帧指针增量?

逆向工程 艾达
2021-06-13 08:55:56

我不断遇到 IDA 不能自动处理的编译模式。考虑以下示例:

mov rax, rsp       ; Set rax at the start of the function
...
lea rbp, [rax-5Fh] ; Shortly afterward, set rbp as the frame pointer at a nonstandard offset
...
mov [rbp+3Fh], rcx ; Reference all stack offsets from rbp for the rest of the function
...

在这个例子中,IDA 似乎已经失去了对rbp's state 的跟踪,作为堆栈帧的偏移量,大概是因为额外的间接性。(我们将复制rspraxrbp,而不是仅仅从rsprbp

我希望上面的例子看起来更像这样:

var_20= qword ptr -20h
...
mov [rbp+5Fh+var_20], rcx

然而,正如人们所期望的,如果我将 的类型更改3Fh为堆栈偏移量,我会得到以下信息:

arg_37= qword ptr 3Fh
...
mov [rbp+arg_37], rcx

这显然是不正确的。我有两个问题:

  • 是否可以生成所需的输出?
  • 如果没有,通常会如何处理?

我知道的解决方案:

  • 我可以为堆栈帧创建一个结构并指定偏移量增量(有时也会调整为负偏移量)。缺点是我必须为我分析的每个堆栈帧创建一个结构,而且我也没有交叉引用。
  • 我可以在堆栈帧中使用不正确的偏移量。这会给我交叉引用,但我希望在触摸 时事情会中断r,偏移量存储返回地址。

同样相关:我正在使用 IDA Pro 6.2。

1个回答

Alt+P将调出Edit function屏幕。

确保BP based frame已选中,然后0x5F在标记为 的框中输入您的值Frame pointer delta