首页
社区
课程
招聘
[原创]【ARM】STM LDM 入栈出栈的N种姿势总结
发表于: 2017-9-29 15:49 8718

[原创]【ARM】STM LDM 入栈出栈的N种姿势总结

2017-9-29 15:49
8718

1 STMFD 满递减  

(1) STMFD SP , {R1-R4}

执行前

执行后


规律总结:

(1)最低编号REG对应->最低内存地址

(2)指令执行后SP指向没有发生改变.



(2)如果是带!的

STMFD SP !, {R1-R4}

执行前

执行后

规律总结:

指令有!时,SP的值最终发生了变化。




执行前

执行后



带!的

(2) LDMFD SP! , {R1-R4}

执行前

执行后























重要的事情重复三遍:

不管那种寻址, 低地址 永远对应 低编号寄存器.

不管那种寻址, 低地址 永远对应 低编号寄存器.

不管那种寻址, 低地址 永远对应 低编号寄存器.





---------------------------------------------------------------------------------------


    指令集版本:arm v5te 32bit

    其寻址方式和x86中的push和pop差不多.


    但是在ARM中还存在其他方式的入栈出栈,
    比如STMFA  STMIB STMFD  STMDB STMEA  
    STMIA STMED STMDA LDMFA  LDMDA LDMFD 
    LDMIA LDMEA  LDMDB LDMED  LDMIB ~~~


    是不是懵逼了,好吧,现在这篇帖子,
    就试图通过调试观察把它们的区别分清。



一 、先解释栈寻址的类型,什么是 空递增 空递减 满递增 满递减。









二 、概念看起来还是有点模糊

        如果你拿不准,指令执行完,SP和堆栈到底是个什么指向,

        可以收藏这篇帖子,以备查询。
        下面调试实例来体会,一切以运行结果为准。

        目录
        1 STMFD 满递减
        2 LDMFD 满递减
        3 STMFA 满递增
        4 LDMFA 满递增
        5 STMEA 空递增
        6 LDMEA 空递增
        7 STMED 空递减
        8 LDMED 空递减


1 STMFD 满递减  

(1) STMFD SP , {R1-R4}

执行前

执行后


规律总结:

(1)最低编号REG对应->最低内存地址

(2)指令执行后SP指向没有发生改变.



(2)如果是带!的

STMFD SP !, {R1-R4}

执行前

执行后

规律总结:

指令有!时,SP的值最终发生了变化。




2 LDMFD 满递减
(1) LDMFD SP , {R1-R4}

执行前

执行后



带!的

(2) LDMFD SP! , {R1-R4}

执行前

执行后




3 STMFA 满递增
STMFA SP! , {R1-R4}








4 LDMFA 满递增
LDMFA SP! , {R1-R4}







5 STMEA 空递增
STMEA SP! , {R1-R4}









6 LDMEA 空递增
LDMEA SP! , {R1-R4}









7 STMED 空递减
STMED SP! , {R1-R4}








8 LDMED 空递减
LDMED SP! , {R1-R4}








三、要强调的一些东西

1 REG列表的编号顺序,必须从小到大,按顺序写。


2 读写时,REG和MEM的对应关系是:低编号---对应---低地址.


重要的事情重复三遍:

不管那种寻址, 低地址 永远对应 低编号寄存器.

不管那种寻址, 低地址 永远对应 低编号寄存器.

不管那种寻址, 低地址 永远对应 低编号寄存器.





四、还有IB  DB  IA  DA结尾的是啥玩意。

当Rn != SP时,寻址方式的名称会发生改变,但是操作还是一样的。

---------------------------------------------------------------------------------------


若有错误希望能指出,共同学习进步~
    但是在ARM中还存在其他方式的入栈出栈,
    比如STMFA  STMIB STMFD  STMDB STMEA  
    STMIA STMED STMDA LDMFA  LDMDA LDMFD 
    LDMIA LDMEA  LDMDB LDMED  LDMIB ~~~


    是不是懵逼了,好吧,现在这篇帖子,
    就试图通过调试观察把它们的区别分清。






[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 84
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢了。学习到了
2017-9-29 16:38
0
雪    币: 101
活跃值: (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
6666
2017-9-29 17:21
0
雪    币: 155
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
真是太六了,不服墙,就服你
2017-9-29 21:34
0
雪    币: 268
活跃值: (655)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
5
期待哟
2017-9-30 09:15
0
雪    币: 7831
活跃值: (5267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2017-10-1 13:20
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
太棒了,总结的很好
2017-11-15 10:36
0
游客
登录 | 注册 方可回帖
返回