如何检测 LDM/STM 指令中的堆栈或替代内存访问类型?

逆向工程 拆卸 部件 手臂
2021-06-27 17:39:07

我正在尝试反汇编一些 ARM 机器代码。ARM 指令集定义了块数据传输指令(LDM 和 STM)如下,用于一次加载和存储到多个寄存器。

有两种类型的寻址模式:用于堆栈或用于其他目的。也许我没有正确理解某些东西,但是我没有看到通过查看机器代码来确定指令使用哪种类型的方法。

它甚至在 CPU 级别上也很重要,仅仅是为了让汇编程序员的生活更轻松吗?因为例如 LDMFD 和 LDMIA 是等效的操作(我认为?)。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

1个回答

ARM手册

LDM 和 LDMFD 是 LDMIA 的同义词。LDMFD 是指它用于从完全降序堆栈中弹出数据。

LDMEA 是 LDMDB 的同义词,指的是它用于从空升序堆栈中弹出数据。

STM 和 STMEA 是 STMIA 的同义词。STMEA 是指它用于将数据推送到空升序堆栈上。

STMFD 是 STMDB 的同义词,指的是它用于将数据推送到完整降序堆栈上。

所以是的,这些是同义词,由制造商确认。