如何确定 ARMv7 上例程的长度?

逆向工程 拆卸 手臂
2021-06-27 08:24:27

我正在对用 ARMv7 编写的汇编例程的逻辑进行反汇编和逆向工程(希望我使用的是正确的术语,因为我是这个特定处理器的新手)。

在这样做的过程中,我遇到了这个网站:ARM 简介为了确定我需要反汇编多少代码,首先我需要确定代码的长度。据我了解,我只需要查找[Bxx][2](分支)指令和改变 PC(程序计数器)的指令,例如,

  • MOV PC, r14
  • POP {r4, r5, pc}

如果我错过了需要注意的任何说明,有人可以告诉我吗?谢谢你。

2个回答

以下是 IDA 认为 ARM 的回报:

  • RET(= MOV PC, LR)
  • POP {reglist}如果reglist包括LRPC
  • LDMFD SP, {reglist},LDMED SP, {reglist}或者LDMDB R11, {reglist}如果reglist包括LRPC
  • 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 我也见过条件分支超出了我期望的函数边界,但我现在找不到任何例子。