我正在使用 IDA pro 6.95(付费版)来重新编写一些 PowerPC 代码。PowerPC 通常r1
用作堆栈指针,因此 IDA 从r1
. 参数传递中r3
,r4
,r5
,等这个问题我有,我看到这一点:
.text: foo:
.text:.set back_chain, -0x30 // Stack frame
.text: .set var_4, -4
.text: .set sender_lr, 4
<<<function preamble snipped>>>
.text: mr r31, r1 // Copy stack pointer to r31
.text: stw r3, 8(r31) // All local variables are relative
.text: stw r4, 0xC(r31) // to r31, instead of r1, so IDA
// doesn't recognize them.
我想看看这个:
.text: foo:
.text:.set back_chain, -0x30 // Stack frame
.text: .set var_C, -C
.text: .set var_8, -8
.text: .set var_4, -4
.text: .set sender_lr, 4
<<<function preamble snipped>>>
.text: mr r31, r1 // Copy stack pointer to r31
.text: stw r3, var_8(r31) // All local variables are
.text: stw r4, var_C(r31) // recognized and nameable.
我想要的是将8(r31)
函数中的所有(例如)局部变量引用转换为正常var_8(r31)
语法。我不想手动更改每个引用。有没有办法:
- 说服 IDA 那
r31
是堆栈指针? - 在一个命令中全部更改
8(31)
为var_8(r31)
? - 否则以我没有想到的方式获得我正在寻找的效果?