我正在对用 ARMv7 编写的汇编例程的逻辑进行反汇编和逆向工程(希望我使用的是正确的术语,因为我是这个特定处理器的新手)。
在这样做的过程中,我遇到了这个网站:ARM 简介。为了确定我需要反汇编多少代码,首先我需要确定代码的长度。据我了解,我只需要查找[Bxx][2]
(分支)指令和改变 PC(程序计数器)的指令,例如,
MOV PC, r14
POP {r4, r5, pc}
如果我错过了需要注意的任何说明,有人可以告诉我吗?谢谢你。
我正在对用 ARMv7 编写的汇编例程的逻辑进行反汇编和逆向工程(希望我使用的是正确的术语,因为我是这个特定处理器的新手)。
在这样做的过程中,我遇到了这个网站:ARM 简介。为了确定我需要反汇编多少代码,首先我需要确定代码的长度。据我了解,我只需要查找[Bxx][2]
(分支)指令和改变 PC(程序计数器)的指令,例如,
MOV PC, r14
POP {r4, r5, pc}
如果我错过了需要注意的任何说明,有人可以告诉我吗?谢谢你。
以下是 IDA 认为 ARM 的回报:
RET
(= MOV PC, LR
)POP {reglist}
如果reglist
包括LR
或PC
LDMFD SP, {reglist}
,LDMED SP, {reglist}
或者LDMDB R11, {reglist}
如果reglist
包括LR
或PC
LDR PC, [SP], #4
BX LR
BX reg
如果前面有POP {reglist}
并且reglist
包括reg
。事实上,可能有这样的事情:
.text:00192CB6 POP {R4}
.text:00192CB8 B.W sub_268508
.text:00192CB8 ; End of function XXX::YYY::zZz(void)
IIRC 我也见过条件分支超出了我期望的函数边界,但我现在找不到任何例子。