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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2845|回复: 12
收起左侧

[Android 原创] ARM汇编的一些规则

[复制链接]
havenow 发表于 2021-3-26 18:31
本帖最后由 havenow 于 2021-3-26 18:33 编辑

ARM参数传入,返回在放在哪个寄存器
参数:R0-R3这4个寄存器用来传递函数调用第1到第4个参数,超出的参数通过堆栈。
返回值:结果为32位时,通过R0返回;结果为64位时,r0放低32位,r1放高32位。

ARM调用方法时,对于寄存器的压栈保护,调用方法与被调用方法分别对哪些寄存器进行压栈保护
被调用模块的寄存器使用  
1.调用模块和被调用模块通过R0-R3传递参数,因此参数少于四个时可以随意     使用剩余的而不必保存和恢复  
2.使用R4-R11之前一定要先在堆栈中保存起来,退出时再恢复   
3.可以使用堆栈,但一定要保证堆栈指针(R13)在进入时和退出时相等   
4.R14用于保存返回地址,使用前一定要备份被调用模块的堆栈使用   
    1.ATPCS规则规定堆栈是满递减(fD)型的,因此使用STMFD/LDMFD指令操作,   
    2.注意保证进入和退出时堆栈指针相等

      ATPCS(ARM-ThumbProcedure Call Standard)寄存器的使用规则   
1. 子程序通过寄存器R0~R3来传递参数。这时寄存器可以记作: A0~A3,被调用的子程序在返回前无需恢复寄存器R0~R3的内容。   
2. 在子程序中,使用R4~R11来保存局部变量,这时寄存器R4~R11可以记作: V1~V8。如果在子程序中使用到V1~V8的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值,对于子程序中没有用到的寄存器则不必执行这些操作。在THUMB程序中,通常只能使用寄存器R4~R7来保存局部变量。   
3.寄存器R12用作子程序间内部过程调用寄存器,记作ip;在子程序的连接代码段中经常会有这种使用规则。   
4. 寄存器R13用作数据栈指针,记做SP,在子程序中寄存器R13不能用做其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等。   
5. 寄存器R14用作连接寄存器,记作LR;它用于保存子程序的返回地址,如果在子程序中保存了返回地址,则R14可用作其它的用途。   
6. 寄存器R15是程序计数器,记作PC;它不能用作其他用途。   
7. ATPCS中的各寄存器在ARM编译器和汇编器中都是预定义的。

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
Kristin_ + 1 我很赞同!
JackieJK + 1 + 1 我很赞同!

查看全部评分

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

飘零星夜 发表于 2021-3-26 19:12
R15:程序计数寄存器
指向当前的程序地址。如果修改它的值,就能改变程序的执行流(很多高级技巧就在这里面)。
lixuyong 发表于 2021-3-27 00:22
芽衣 发表于 2021-3-27 06:42
abcde1224 发表于 2021-3-27 09:46
感谢楼主分享
宜城小站 发表于 2021-3-27 10:19
感谢楼主分享
学习了
djdl 发表于 2021-3-27 11:49
感谢楼主,收藏
Rebirthe 发表于 2021-3-27 18:13
感谢分享
GTK+ 发表于 2021-3-27 20:00
感觉啥也没说啊
盐帮仙人 发表于 2021-3-28 08:21
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-5-4 08:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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