首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ARM架构(thumb/arm)中R7和R11与链接寄存器的关系调用约定

在ARM架构中,R7和R11是通用寄存器,用于存储数据和地址。它们与链接寄存器(LR)之间有一定的关系,特别是在函数调用和返回过程中的调用约定中。

在ARM架构中,函数调用和返回过程中使用链接寄存器(LR)来保存返回地址。当一个函数被调用时,当前函数的返回地址会被保存到链接寄存器(LR)中。然后,函数可以使用通用寄存器(如R7和R11)来存储其他临时数据。

具体来说,R7和R11在函数调用过程中的使用如下:

  1. 函数调用前:
    • R7:通常用作静态基址寄存器(Static Base Register),用于存储全局变量或静态数据的基地址。
    • R11:通常用作帧指针寄存器(Frame Pointer Register),用于指向当前函数的栈帧(Stack Frame)。
  2. 函数调用过程中:
    • 在函数调用前,将返回地址保存到链接寄存器(LR)中。
    • 在函数内部,可以使用R7和R11来存储临时数据或者在函数调用过程中需要保留的寄存器值。
  3. 函数返回过程中:
    • 在函数返回前,将链接寄存器(LR)中保存的返回地址恢复到程序计数器(PC)中,以便返回到调用函数的正确位置。
    • 在函数返回过程中,R7和R11的值可以被修改,因此在函数返回前需要确保这些寄存器的值被正确恢复。

总结起来,R7和R11在ARM架构中与链接寄存器(LR)的关系是在函数调用和返回过程中的调用约定中使用。它们用于存储临时数据、全局变量的基地址和函数栈帧指针。具体的使用方式和含义可能会因编程语言、编译器和操作系统的不同而有所差异。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

嵌入式:什么是ATPCS

ATPCS介绍 ATPCS(ARM-Thumb Produce Call Standard)是ARM程序Thumb程序中子程序调用基本规则,目的是为了使单独编译C语言程序汇编程序之间能够相互调用...被调用子程序在返回前无需恢复寄存器R0~R3内容; 在子程序,使用寄存器R4~R11来保存局部变量。这时,寄存器 R4~R11可以记作V1~V8。...在Thumb程序,通常只能使用寄存器R4~R7来保存局部变量; 寄存器R12用作子程序间scratch寄存器(用于保存SP,在函数返回时使用该寄存器出栈),记作ip(Intra-Procedure-call...寄存器sp在进入子程序时退出子程序时值必须相等; 寄存器R14称为链接寄存器,记作lr。它用于保存子程序返回地址。...sl ARM状态局部变量寄存器7, 在支持数据栈检查ATPCS为数据栈限制指针 R11 v8 fp ARM状态局部变量寄存器8/帧指针 R12 ip 子程序内部调用scratch寄存器 R13

89850

安卓逆向:这是一篇逆向基础函数在ARM32刨根问底。

ARM32函数需要关注点有哪些? 1. 怎么去识别ARM函数? 2. 函数采用什么样调用约定? 3. 函数参数是怎样进行传递? 4. 函数返回值是通过怎样接收存储? 5....ARM函数调用约定采用是:ATPCS ATPCS英文全称是ARM-THUMB procedure call standard(ARM-Thumb过程调用标准) 总结:参数1~参数4 分别保存到 R0...r4 -r11:存储函数局部变量,Thumb模式不会使用r8以后寄存器 r12:是内部过程调用暂时寄存器(intra-procedure-call scratch register)。...在计算机,栈非常重要。这个寄存器保存着栈顶指针。这里可以看到更多关于栈信息。 r14:链接寄存器(link register)。存储着当被调用函数返回时,将要执行下一条指令地址。...函数调用过程涉及四个重要寄存器:PC、LR、SPFP。注意,每个栈帧PC、LR、SPFP都是寄存器历史值,并非当前值。

3.4K74

ARM汇编简单学习

简介 ARM汇编语言是针对ARM架构设计低级编程语言,用于直接操作硬件编写高效系统级程序。...寄存器 ARM处理器寄存器系统在不同架构版本中有所变化,但下面的内容将基于较常见32位ARM Cortex-A系列处理器为例,详细介绍ARM寄存器系统基本构成。...通用寄存器(General Purpose Registers, GPRs) ARM架构通常提供一组32位宽通用寄存器,数量在不同ARM架构版本工作模式下有所不同,但至少包含R0至R15。...在ARM Cortex-A系列处理器,常常提及32个32位通用寄存器(有时包括程序计数器PC)。...B label ; 无条件跳转到label BL subroutine ; 调用子程序并保存返回地址 BX/BLX:除了跳转外还能切换指令集状态,如从ARM态切换到Thumb

11710

arm上backtrace分析实现原理

第二种可以查看到函数调用关系,根据这些调用关系,就可以非常方便跟踪到出问题地方,然后进行一定跟踪。但是需要理解寄存汇编之类知识。...第三种信息最全,调用关系参数信息都有,但是对工具链系统都提出了一些要求。往往在嵌入式开发过程,涉及到业务逻辑非常复杂时候可以进行分析。但是一般情况不会用到coredump。...R11:栈基址FP THUMB2下为R7。...2.1 APCS ARM过程调用标准规范了arm寄存器使用、过程调用时 出栈入栈约定。如下图示意。 ? 栈回溯输出寄存器值是入栈时保存起来寄存器值。...04 总结 对于arm32体系架构backtrace基本原理可以参考如上描述,其中最核心部分是每个函数寄存器地址指向是上个函数地址,所以利用这个特性,就可以一级一级跟踪下去,从而实现栈回溯功能

6.3K30

C汇编如何互相调用?嵌入式工程师必须掌握

、thumber程序调用规范) 为了使单独编译C语言程序汇编程序之间能够相互调用,必须为子程序之间调用规定一定规则.ATPCS就是ARM程序THUMB程序中子程序调用基本规则。...2)在子程序,使用寄存器R4~R11来保存局部变量.这时,寄存器 R4 ~ R11可以记作V1 ~ V8。...在Thumb程序,通常只能使用寄存器R4~R7来保存局部变量。 3)寄存器R12用作过程调用临时寄存器(用于保存SP,在函数返回时使用该寄存器出栈), 记作ip。...;局部变量寄存器 R6 v3 必须保护;局部变量寄存器 R7 v4 必须保护;局部变量寄存器 R8 v5 必须保护;局部变量寄存器 R9 v6 必须保护;局部变量寄存器 R10 sl 栈限制 R11 fp...C调用汇编 例1:c调用汇编文件函数带返回值 简化代码如下,代码架构可以参考《7. 从0开始学ARM-GNU伪指令、代码编译,lds使用》。

1.5K40

S3C2440④ | ARM-THUMB子程序调用规则ATPCS

在GPIO实验,我们首先编写汇编程序操作寄存器点亮LED,奈何汇编语言可读性可移植性太差,所以编写启动代码,设置栈顶指针SP,然后调用C语言中main函数,转入C语言世界,由C语言访问控制寄存器...其实,对于ARM处理器,在ARM指令集汇编程序THUMB指令集汇编程序制定了子程序调用规则 —— ATPCS规则,这个规则包括: 寄存器使用规则 数据栈使用规则 参数传递规则 1.寄存器使用规则...) R13 sp 数据栈指针(指向栈顶) R12 ip 子程序内部调用scratch寄存器 R11 v8 ARM状态局部变量寄存器8 R10 v7 ARM状态局部变量寄存器7 R9 v6 ARM状态局部变量寄存器...: 子程序间通过寄存器R0-R3传递参数返回结果; 子程序通过寄存器R4-R11保存局部变量; 寄存器R12用作子程序间scratch寄存器寄存器R13用作数据栈指针,指向栈顶; 寄存器R14用作链接寄存器...5.实验总结 通过本实验掌握了ATPCS规则在实际开发使用,在调用main函数时使用R0寄存器传递参数,总结如下: ARM处理器中子程序调用规则由ATPCS制定,包括寄存器使用规则,数据栈使用规则,

86420

STM32上backtrace原理分析

13个通用寄存器,r0-r12 2个不同模式下使用SP, PSP(SP_process) MSP(SP_main) 1个链接寄存器LR(r14) 1个程序计数器(PC) 1个程序状态寄存器(xPSR...通用寄存器R0-R12 上图将通用寄存器分为low registerhigh registers就是根据指令集来说,对于thumb指令,是16位,只能访问到low register,也就是R0-R7...程序链接寄存器LR 程序链接寄存器在函数返回时候会被使用到,比如一个函数A执行另外一个函数B,如下 void fun_A() { fun_B() } 那么当执行到fun_B时候,首先编译器编译汇编代码会将...对应实际含义就是压入LRR7寄存器,当执行PUSH后,SP指针会自动减去两个寄存器大小,也就是8个字节。...rt-thread操作系统前面压栈数据 # xPSR->PC->LR->R12->R3->R2->R1->R0 # R11 R10 R9 R8 R7 R6 R5 R4 FLAG 一共压了16

2.5K62

嵌入式ARM设计编程(四) ARM启动过程控制

3)如何在C语言中调用汇编语言函数,并完成参数传递? 4)汇编语言函数中用到寄存器如何保护恢复,为什么要保护参考程序R11?...5)将delay.sR11改成R4,并将两条R11 保护恢复语句stmfd sp!,{r11} ldmfd sp!...答:由上代码可知,为保证程序调用时参数正确传递,汇编程序设计要遵守ATPCS(ARM-Thumb Produce Call Standard),它是ARM程序Thumb程序中子程序调用基本规则,目的是为了使单独编译...根据ATPCS规则,R11对应ARM 状态局部变量寄存器8,R11含有循环次数重要参量,因此要保护R11避免在程序运行调用过程受到影响而导致程序异常。...此外,还有ARM程序Thumb程序中子程序调用基本规则ATPCS(ARM-Thumb Produce Call Standard),目的是为了使单独编译C语言程序汇编程序之间能够相互调用

1.5K20

linux内核学习(四)之回顾简单汇编知识(一))

,我们知道一般ARM都是采用risc架构,如果有网友对risc-v架构感兴趣,可以来交流学习),好了,废话就不多说了,开始进入主题啦!...(1)ARM状态下通用寄存器程序计数器: (2)ARM状态下程序寄存器: 注意上面表格中小影阴直角三角形表示是分组寄存器,所谓分组寄存器,就是说是当前模式下独有的,不共享。...注解: --1 其中 r0~r3 主要用于子程序间传递参数, r4~r11 主要用于保存局部变量,但在 Thumb 程序,通常只能使用 r4~r7 来保存局部变量;r12 用作子程序间scratch...这个链接寄存器主要用在函数A函数B,A正在运行时,突然要调用B,那么就引了一个分支了,然后这个函数B去运行,运行完之后还是要返回到最初然后继续往下走,那么这个时候返回值应该要有个记录,这就是链接寄存器...CPSRSPSR都是程序状态寄存器,其中SPSR是用来保存中断前CPSR值,以便在中断返回之后恢复处理器程序状态;CPSR是当前程序状态寄存器意思,SPSR是程序状态保存寄存器,这里我在网上看到一个非常通俗易通解释这两个寄存器用法

49510

介绍一种性能较好 Android native unwind 技术

按照 ARM 调用约定(AAPCS)[1] ,在 fp 寄存器指向栈空间上紧凑存着上一层函数 fp 地址函数返回地址。大概样子就是下图这样。...额外提一下,特定 fp 寄存器在 64 位上是 x29 寄存器,32 位则是 r7(Thumb Code) 或 r11(ARM Code) [2] 。 ?...不过它也有些问题,比如在 Arm 32 位上某些情况 fp 会被忽略掉或不准确 [3] ,也不能回溯穿过 JNI OAT (没遵守 fp 约定)。 [1]....ARM EH 数据存放在 ELF .ARM.exidx .ARM.extab  [7] 。下图是 ARM 定义回溯指令集合,相比 Dwarf 实现简单一些。 ?...可以看到只有我们关心寄存器才有相应指令,比如 r7/r11 是 fp 寄存器,r4 可能存放了 dex pc,r10 存放着 JNI 栈基地址,lr 是返回地址。

6.1K41

ARM架构一次充电

架构包含:总线、电源管理、缓存、ARM架构 AMR架构又称为ARM CPU架构,它包含:指令集、寄存器组、异常模型、内存模型、调试,跟踪分析。...,也叫可变寄存器,子程序使用时不需要保存; x16-x17: 子程序内部调用寄存器(IPx),使用时不需要保存,尽量不要使用; x18: 它是平台寄存器, 它使用平台相关, 尽量不要使用; x19-...A32 指令集就是在 Armv6 Armv7 架构我们常说 ARM 指令集,Armv8 及之后改名 A32 以 A64 进行区分。...32 指令集就是在在 Armv6 Armv7 架构中被我们所熟知 Thumb 指令集,Armv8 及之后改名为 Thumb32。...ARM处理器工作状态 从编程角度来看,ARM微处理器工作状态一般ARMThumb有两种,并支持在两种状态之间切换。

99920

嵌入式:ARM工作模式寄存器组织

文章目录 特权模式 处理器启动时模式转换图 ARM寄存器组织 ARM寄存器组成概述 ARM状态下寄存器组织 Thumb状态下寄存器组织 CPSR(当前程序状态寄存器低5位用于定义当前操作模式...它供需要访问系统资源操作系统任务使用,但避免了使用异常模式有关附加寄存器,这就使得当任何异常出现时,都不会使任务状态不可靠。...6个状态寄存器 CPSR;SPSR_svc、SPSR_abt、SPSR_und、SPSR_irqSPSR_fiq ARM状态下寄存器组织 ARM状态寄存器简介 ARM状态下寄存器组织...CPSRSPSR格式 Thumb状态下寄存器组织 Thumb状态下寄存器集是ARM状态下寄存器子集。...程序员可以直接访问8个通用寄存器(R0~R7),程序计数器PC、堆栈指针SP、连接寄存器LR当前状态寄存器CPSP。每一种特权模式都各有一组SP,LRSPSR。

82920

android hook技术,Android Native Hook技术(一)

大家好,又见面了,我是你们朋友全栈君。 原理分析 ADBI是一个著名安卓平台hook框架,基于 动态库注入 inline hook 技术实现。...在目标进程栈空间上构造dlopen()调用 要修改目标进程寄存器等信息,需使用到ptrace()函数,gdb等程序拥有查看、修改调试进程寄存器能力就是因为使用了ptrace()。...因为ARM使用了ARMThumb两种指令集,所以代码需进行区分: if (addr % 4 == 0) { /* ARM指令集 */ } else { /* Thumb指令集 */ } 这样进行判断依据是...第二个for循环用新跳转指令进行覆写,关键三条指令分别保存在jump[0]-[2]: jump[0]赋值0xe59ff000,翻译成ARM汇编为 ldr pc,[pc,#0] ,由于pc寄存器读出值是当前指令地址加...jump[2]保存是hook函数地址。jump[1]仅用来4字节占位。Thumb分支原理ARM分支一致,不再分析。

86310

嵌入式ARM设计编程(二) 字符串拷贝

完成分支程序设计,要求判断参数,根据不同参数,调用不同子程序。...堆栈地址0x400,将变量原字符串内容拷贝到目的字符串,要能判断原字符串结束符(0),并统计字符串字符个数。通过AXD查看寄存器memory寄存器数据变化。...堆栈地址0x400,将变量原字符串内容拷贝到目的字符串,要能判断原字符串结束符(0),并统计字符串字符个数。通过AXD查看寄存器memory寄存器数据变化。...最后把R4~R11清空赋值为0。 提示:多字加载存储使用多寄存器寻址,使用指令为LDMSTM。如: LDMIA R0!, {R4-R11} STMIA R1!...#3 ; 设置寄存器R6初始值 MOV R7,#4 ; 设置寄存器R7初始值 MOV R8,#5 ; 设置寄存器R8初始值 MOV R9,#6 ; 设置寄存器R9初始值

42410

arm汇编指令详解带实例_汇编buf指令

ARM编程模式七种模式 基本设定 架构(32位) 约定 Byte(字节):8bits Halfword(半字) :16 bits (2 byte) Word(字):32bits(4 byte...ARM汇编特点 LDR/STR架构 ARM采用RISC架构,CPU本身不能直接读取内存,而需要先将内存内容加载入CPU通用寄存器才能被CPU处理。..., {r2-r7, lr} 将寄存器列表寄存器(R2到R7,lr)存入堆栈 相对寻址 beq flag ​ flag: 指令后缀 同一指令经常附带不同后缀,变成不同指令。...SoC内部另一处理核心,协助主CPU实现某些功能,被主CPU调用执行一定任务。 ARM 处理器支持 16 个协处理器。在程序执行过程,每个协处理器忽略属于 ARM 处理器其他协处理器指令。...mov指令替代或者文字池方式处理; adr总是以PC为基准来表示地址,因此指令本身运行地址有关,可以用来检测程序当前运行地址 在哪里 ldr加载地址链接时给定地址有关,由链接脚本决定。

1.3K10

5_LED程序涉及编程知识

\参考资料\Arm架构参考资料\ ARM® and Thumb®-2 Instruction Set Quick Reference Card.pdf 5.2.2 汇编指令 ​ 汇编指令格式,如下:...\ ATPCS(ATM-Thumb指令调用标准).pdf 参考章节: 所有 5.5.1 ATPCS规则 ​ ATPCS即ARM-THUMB procedure call standard(ARM-Thumb...过程调用标准)简称,是基于ARM指令集THUMB指令集过程调用规范,规定了调用函数如何传递参数,被调用函数如何获取参数,以何种方式传递函数返回值。 ​...寄存器R0~R15在ATPCS规则使用: 在函数,通过寄存器R0R3来传递参数,被调用函数在返回前无需恢复寄存器R0R3内容 在函数,通过寄存器R4~R11来保存局部变量 寄存器R12用作函数间...scratch寄存器 寄存器R13用作栈指针,记作SP,在函数寄存器R13不能用做其他用途,寄存器SP在进入函数时退出函数时值必须相等 寄存器R14用作链接寄存器,记作LR,它用于保存函数返回地址

53310

Android 渗透测试学习手册 第八章 ARM 利用

8.1 ARM 架构导论 ARM 是基于精简指令集(RISC)架构,这意味着其指令比基于复杂指令集(CISC)机器少得多。...以下是这五个寄存器及其名称: R11: 帧指针 (FP) R12: 过程内寄存器 (IP) R13: 栈指针 (SP) R14: 链接寄存器 (LR) R15: 程序计数器 (PC) 下面的图展示了 ARM...架构: 在五个里面,我们会特别专注于这三个,它们是: 堆栈指针(SP):这是保存指向堆栈顶部指针寄存器 链接寄存器(LR):当程序进入子过程时存储返回地址 程序计数器(PC):存储要执行下一条指令...执行模式 ARM 有两种不同执行模式: ARM 模式:在 ARM 模式下,所有指令大小为 32 位 Thumb 模式:在 Thumb 模式下,指令大部分为 16 位 执行模式由 CPSR 寄存器状态决定...还存在第三模式,即 Thumb-2 模式,它仅仅是 ARM 模式 Thumb 模式混合。 我们在本章不会深入了解 ARM Thumb 模式之间区别,因为它超出了本书范围。

41730

手把手教你从零开始实现C++协程

这就需要了解寄存器使用约定,以 32 位 ARM 架构为例,其调用约定在 AAPCS(Procedure Call Standard for the ARM Architecture)官方文档中有详细描述...由于每一种 CPU 架构都有自己指令集函数调用约定,甚至同一种 CPU 架构下不同操作系统也会有不同调用约定。为了方便讲解,本文涉及到所有 API 实现均基于 32 位 ARM 架构。...不只是 32 位 ARM,大部分架构调用约定中都有前 N 个参数直接使用寄存器,超过 N 个参数需要压栈约定。...架构实现原理,要支持其它架构也就不难了,套路都类似,只需要熟悉每一种 CPU 架构常用指令集调用约定,最终就能实现一个支持全平台全架构 owl.context 库。...当然,在具体实现过程中会有很多坑,如: win32 如何在协程中支持 C++ 异常 Windows 对 FS/GS 寄存器特殊处理 x64 AMD64 调用约定区别 ARM/THUMB 模式兼容

3.7K50

ARM指令集

指令在实现跳转同时,完成处理器工作状态切换(ARM状态Thumb状态间切换)。 BX指令,用寄存器最低位来指示切换到哪一个工作状态。...因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序调用处理器工作状态切换。...标志位表示是操作数1操作数2关系(大、小、相等),例如,当操作数1大于操作操作数2,则此后有GT 后缀指令将可以执行。...目的寄存器,操作数1操作数2使用寄存器必须在R0~R7之间。...5)乘法指令乘加指令 ARM微处理器支持乘法指令乘加指令共有6条,可分为运算结果为32位结果为64位两类,前面的数据处理指令不同, 指令所有操作数、目的寄存器必须为通用寄存器

68320

ARM Linux 启动时自解压过程 | Linux 内核

接下来,内核设置一个局部栈指针 malloc() 区域,以便我们可以处理子例程调用进行小内存分配,简单地说,就是可以执行 C 代码了。...如果找到附加 DTB,并设置了 CONFIG_ARM_ATAG_DTB_COMPAT,我们首先将 DTB 扩展 50% 并调用 atagstofdt,它将使用来自 ATAG 信息(例如内存块内存大小...,解压类型因 Kconfig 选项而异:编译内核时选择解压器将链接到映像并从物理内存执行。...所有架构共享同一个解压库。调用 _decompress() 函数将取决于链接到图像 lib/decompress*.c 哪个解压缩器。...在调用解压器之前,解压器需要所有关于压缩内核位置变量都设置在寄存器中了。

2.7K10
领券