我正在反汇编并反向工程用ARMv7编写的汇编例程的逻辑(希望我使用正确的术语,因为我是该特定处理器的新手)。偶然发现该站点:ARM简介。为了确定我需要分解多少代码,首先,我需要确定代码的长度。据我了解,我只需要查找[Bxx][2](分支)指令和更改PC的指令(程序计数器),例如


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

如果我错过了需要注意的任何说明,可以请他人提供建议吗?谢谢。

#1 楼

以下是IDA认为ARM会返回的内容: br />
RETMOV PC, LRPOP {reglist}(如果reglist包括LRPC

LDMFD SP, {reglist}
LDMED SP, {reglist}

LDMDB R11, {reglist}(如果前面带有reglistLR包括q43)。


#2 楼

实际上,可能会出现以下情况:

.text:00192CB6                 POP             {R4}
.text:00192CB8                 B.W             sub_268508
.text:00192CB8 ; End of function XXX::YYY::zZz(void)


IIRC我还看到条件分支超出了我期望的函数边界,但是我找不到任何东西现在是示例。