吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2505|回复: 3
收起左侧

[Android 原创] 如何动态调试来学习ARM汇编 5 sp(r13)寄存器

[复制链接]
havenow 发表于 2021-3-20 18:25
本帖最后由 havenow 于 2021-3-20 18:34 编辑

栈用来存储临时数据,使用push,pop指令来和栈交互,push和pop是一系列其他的内存相关指令的别名,而不是实际指令,使用push和pop是为了操作简便。

一条数据(32bit)将被放置的实际地址由栈指针定义,这个地址存储在sp寄存器中。

     sp可能会指向栈中当前(最新)的的项,或者指向当前项的下一可用的内存槽。

sp当前指向栈中的最后一个项(full实现)
sp指向栈的下一个空白内存槽(empty实现),数据将首先被放置到这里

1

1

下面总结了不同栈实现方式,可以使用下表来描述在不同情况下,存储多个指令和载入多个指令在不同情形下是如何使用的

2

2

下面是一个使用full descending栈的例子            


        .text
        .global main
main:
        mov r0, #2
        push {r0}
        mov r0, #3
        pop {r0}
        bx lr


执行mov r0, #2指令后,sp的地址是0xfffefac0,r0是2

3

3



执行执行push {r0}指令后,sp的地址是0xfffefac0 – 4 = 0xfffefabc,r0是2

4

4



执行mov r0, 3指令后,sp的地址是没改变,r0是3;只是用来改变r0的值

5

5



执行pop {r0}指令后,sp的地址是0xfffefabc + 4 = 0xfffefac0,r0是2
pop指令被执行,sp从地址0xfffefabc读取4字节的数据,让后sp寄存器0xfffefabc + 4。

6

6



可以看到gdb(cef)中栈的视图是

8

8

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
heheaini + 1 + 1 给力

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tan567421 发表于 2021-3-21 10:47
不错的分享.感谢学习.```
xixicoco 发表于 2021-3-21 12:43
sjzdevin 发表于 2021-3-21 21:57
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 02:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表