我有一个来自 IDAPro 的冷火序列,如下所示:
sub_29be8:
var_8 = -8
var_2 = -2
arg_0 = 8
arg_6 = $E
link a6, #-4;
move.l a2, -(sp)
movea.l arg_0(a6),a2
tst.w arg_6(a6)
bne.s loc_29c00
bset #5, $1e(a2)
bra.s loc_29c14
....
在此处的文档中,我在理解文档的确切内容时遇到了一些问题。
LINK Ay,#<displacement> W
SP – 4→SP; //subtract SP by 4 and set into SP
Ay → (SP); //set address pointed to in Ay and set into value of SP
SP→Ay, SP + dn → SP //set SP into Ay, add the offset specified by <displacement> and set into SP
是否所有这些步骤LINK都是针对指令执行的,还是基于我尚未发现的某些处理器状态的可能性?(这似乎是为函数调用设置堆栈。)
我对序列的下一个问题是第二条指令, move.l a2, -(sp)
这似乎是将 alongword从 a2移动到堆栈指针中,但是否定对我来说看起来很奇怪。它似乎是“将 a2 中的地址移动到 SP,然后将其值乘以 -1”,但我也可以看到括号被用作指定要应用于地址的操作顺序。