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

Linux ARM上程序寄存器和堆栈的初始状态

在 Linux ARM 架构上,程序寄存器和堆栈的初始状态如下:

  1. 程序寄存器:程序寄存器是 CPU 中的一组寄存器,用于存储程序计数器(PC)、堆栈指针(SP)、链接寄存器(LR)、程序状态寄存器(PSR)等信息。在 Linux ARM 系统中,程序寄存器的初始状态如下:
  • PC:程序计数器,用于存储下一条要执行的指令的地址。在 Linux ARM 系统中,PC 的初始值为 0x00000000。
  • SP:堆栈指针,用于指向当前堆栈的顶部。在 Linux ARM 系统中,SP 的初始值为 0x00000000。
  • LR:链接寄存器,用于存储函数调用返回时的地址。在 Linux ARM 系统中,LR 的初始值为 0x00000000。
  • PSR:程序状态寄存器,用于存储当前 CPU 的状态信息。在 Linux ARM 系统中,PSR 的初始值为 0x00000000。
  1. 堆栈:堆栈是一种数据结构,用于存储函数调用时的临时变量、参数、返回地址等信息。在 Linux ARM 系统中,堆栈的初始状态如下:
  • 堆栈顶部:在 Linux ARM 系统中,堆栈顶部的地址由 SP 寄存器指向。
  • 堆栈底部:在 Linux ARM 系统中,堆栈底部的地址由内存空间的边界决定。

需要注意的是,Linux ARM 系统中程序寄存器和堆栈的初始状态可能会因为不同的硬件和软件配置而有所不同。因此,在实际使用中,需要根据具体情况进行调整。

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

相关·内容

通过反汇编理解函数调用机制(x86ARM

在分析上面的汇编程序之前,需要了解rbp、rsp为栈基址寄存器、栈顶寄存器,分别指向栈底栈顶;edx、eax、esi、edi均为x86CPU通用寄存器,可以存放数据(虽然它们还有别的作用,但是本文章不涉及...,是因为编译器还么有那么“智能”,它只能通过分析前部分变量,一次性程序扩充堆栈) 然后向栈底上方偏移地址为812单元存入数据12; 把数据送入通用寄存器中,以供新函数调用; 跳转到add...使用arm-linux-gcc编译并反汇编:arm-linux-objdump -D -m arm a.out 得到arm机器汇编代码(除去一些初始代码)如下: ? ?...这段代码解析与x86类似,只不过需要了解几个arm汇编指令寄存器名称。fp为帧寄存器,起“标签”作用。...ARM堆栈提供硬件支持,它有一个专门寄存器sp指向栈顶,ARM支持四种堆栈工作方式,最常用也是x86类似,即从高地址向低地址生长。

1.8K20

系统启动流程-armV7

初始化核心模式堆栈寄存器初始化任何关键 I/O 设备。 执行NEON 或VFP 任何必要初始化。 启用中断。 更改核心模式或状态。 处理安全世界所需任何设置(参见第 21 章)。...例如,可能需要对将保存未初始化 C 变量内存进行零初始化,将其他变量初始值从 ROM 映像复制到 RAM,并设置应用程序堆栈堆空间。...这会初始化主内存并将压缩 Linux 内核映像复制到主内存中(从闪存设备、板内存、MMC、主机 PC 或其他地方)。引导加载程序将某些初始化参数传递给内核。...示例包括描述物理内存映射 ATAG_MEM 描述压缩 ramdisk 映像所在位置 ATAG_INITRD2。引导加载程序还必须提供 ARM Linux 机器类型号 (MACH_TYPE)。...它初始化tick control、内存系统特定于体系结构子系统,并处理bootloader传递命令行选项。 设置堆栈初始Linux 调度程序。 设置各种内存区域并分配页面。

1K10

嵌入式ARM设计编程(三) 处理器工作模式

如果能得话,观察用户模式下压栈之前压栈之后其堆栈区域变化情况。 5)观察本程序模式切换过程中SPSR有无变化,并解释其原因。...由可知,系统复位后处于管理模式。 2)记录每种模式下初始堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元数值。并分析快速中断FIQ模式与其他模式存入R1-R12有什么不同。...5)观察本程序模式切换过程中SPSR有无变化,并解释其原因。 答:除了用户模式系统模式,其余模式下都有一个私有SPSR保存状态寄存器....用来保存切换到该模式之前执行状态,SPSR是异常模式程序状态保存寄存器, 当特定异常中断发生时,这个寄存器存放CPSR内容,在异常中断退出时,可以用SPSR来恢复CPSR,但是通过观察可知,整个切换过程中没有异常发生...此外也使用状态寄存器到通用寄存器传送指令(MRS)以及通用寄存器状态寄存器传送指令(MSR),修改状态寄存器通过“读取-修改-写回”三个步骤操作来实现。

41120

10_异常与中断

特权级别定义了在当前安全状态下访问资源能力,并不暗含在其他安全状态下访问资源能力。 ​ 通用操作系统(例如Linux)及其应用程序应在非安全状态下运行。...R15是程序计数器并保存当前程序地址(实际,在ARM状态下,它始终指向当前指令之前八个字节,而在Thumb状态下,它始终指向当前指令之前四个字节,这是原始ARM1三级流水线遗留特性)。...在使用堆栈之前,必须通过引导代码初始化SP(堆栈指针)(针对每种模式)。...它是最高优先级异常,无法屏蔽。电后,此异常用于在处理器核执行代码以对其进行初始化。 ​ (4)生成异常指令 ​ 某些指令执行会产生异常。...每个CPU核CPU interface有助于发送给该CPU核中断控制处理。 10.6.2 初始化 ​ distributorCPU interface在复位时均被禁用。

1.2K10

【嵌入式】基于ARM嵌入式Linux开发总结

设计高性能、低功耗嵌入式处理器。 2、ARM微处理器工作状态:两种指令对应两种状态(通常情况) (1)Thumb状态ARM状态; (2)32位定长ARM指令,16位定长Thumb指令。..., SPSR_und,SPSR_svc,SPSR_mon (6)可复用寄存器: ① SP堆栈指针寄存器-R13,用于保存子程序调用或异常处理临时数据; ② LR连接寄存器-R14,用于保存子程序调用或异常处理时...(7)PSR程序状态寄存器: ① 包括CPSR当前程序状态寄存器SPSR备份程序状态寄存器; ② CPSP用于保存当前模式下处理器模式、状态、中断使能、大小端模式及条件位等信息; ③ SPSR...用于备份异常发生前CPSR寄存器值,以便异常处理结束时能返回用户程序状态。...进程编程 一、Linux进程编程 进程(Process)是计算机中程序关于某数据集合上一次运行活动,是操作系统进行资源分配调度基本单位,是操作系统结构基础。

18.2K20

ARMv8 异常处理简介

(2)堆栈指针寄存器SP 在AArch64状态下,除了通用寄存器外,还为以下每个异常级别实现了专用堆栈指针寄存器堆栈指针寄存器为: SP_EL0SP_EL1。...可以通过异常级别的堆栈指针后缀表明所选堆栈指针: t表明使用SP_EL0堆栈指针。 h表明使用SP_ELx堆栈指针。 th后缀基于线程(thread)处理程序(handler)首字母。 ?...仅针对同步异常SError进行更新。因为IRQ或FIQ中断处理程序从通用中断控制器(GIC)寄存器信息获取状态。...每个表占128个字节,可以保存32条指令(arm64指令长度也是4字节),以linux kernel-4.19/arch/arm64/kernel/entry.S为例,异常向量表入口如下图,一共有4...另外就是读取elr_el1spsr_el1等寄存器值。总之,kernel_entry主要将CPU寄存器按照pt_regs结构体定义将异常第一现场保存到栈

2.9K31

一文读懂 | Linux各种栈:进程栈 线程栈 内核栈 中断栈

有专门栈指针寄存器,以及特定硬件指令来完成 入栈/出栈 操作。例如在 ARM 架构,R13 (SP) 指针是堆栈指针寄存器,而 PUSH 是用于压栈汇编指令,POP 则是出栈汇编指令。...【扩展阅读】:ARM 寄存器简介 ARM 处理器拥有 37 个寄存器。这些寄存器按部分重叠组方式加以排列。每个处理器模式都有一个不同寄存器组。...如果返回地址存储在堆栈,则可将 lr 用作通用寄存器 * 程序计数器 (pc):指令寄存器 应用程序状态寄存器 (APSR):存放算术逻辑单元 (ALU) 状态标记副本 * 当前程序状态寄存器...(CPSR):存放 APSR 标记,当前处理器模式,中断禁用标记等 * 保存程序状态寄存器 (SPSR):当发生异常时,使用 SPSR 来存储 CPSR 上面是栈原理实现,下面我们来看看栈有什么作用...即使有另外一个任务在等待状态程序是没法从此 main 函数里面跳转到另一个任务。因为如果是函数调用关系,本质还是属于 main 函数任务中,不能算多任务切换。

1.6K20

一文搞懂 | Linux各种栈(进程栈 线程栈 内核栈 中断栈)

有专门栈指针寄存器,以及特定硬件指令来完成 入栈/出栈 操作。例如在 ARM 架构,R13 (SP) 指针是堆栈指针寄存器,而 PUSH 是用于压栈汇编指令,POP 则是出栈汇编指令。...如果返回地址存储在堆栈,则可将 lr 用作通用寄存器 程序计数器 (pc):指令寄存器 应用程序状态寄存器 (APSR):存放算术逻辑单元 (ALU) 状态标记副本 当前程序状态寄存器 (CPSR)...:存放 APSR 标记,当前处理器模式,中断禁用标记等 保存程序状态寄存器 (SPSR):当发生异常时,使用 SPSR 来存储 CPSR 上面是栈原理实现,下面我们来看看栈有什么作用。...即使有另外一个任务在等待状态程序是没法从此 main 函数里面跳转到另一个任务。因为如果是函数调用关系,本质还是属于 main 函数任务中,不能算多任务切换。...而 ARM 中断栈内核栈则是共享;中断栈内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核栈一些重要数据,所以栈空间有时候难免会捉襟见肘。

4.5K20

Linux各种栈:进程栈 线程栈 内核栈 中断栈

有专门栈指针寄存器,以及特定硬件指令来完成 入栈/出栈 操作。例如在 ARM 架构,R13 (SP) 指针是堆栈指针寄存器,而 PUSH 是用于压栈汇编指令,POP 则是出栈汇编指令。...如果返回地址存储在堆栈,则可将 lr 用作通用寄存器 程序计数器 (pc):指令寄存器 应用程序状态寄存器 (APSR):存放算术逻辑单元 (ALU) 状态标记副本 当前程序状态寄存器 (CPSR)...:存放 APSR 标记,当前处理器模式,中断禁用标记等 保存程序状态寄存器 (SPSR):当发生异常时,使用 SPSR 来存储 CPSR 上面是栈原理实现,下面我们来看看栈有什么作用。...即使有另外一个任务在等待状态程序是没法从此 main 函数里面跳转到另一个任务。因为如果是函数调用关系,本质还是属于 main 函数任务中,不能算多任务切换。...而 ARM 中断栈内核栈则是共享;中断栈内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核栈一些重要数据,所以栈空间有时候难免会捉襟见肘。

2.8K50

Linux各种栈:进程栈 线程栈 内核栈 中断栈

有专门栈指针寄存器,以及特定硬件指令来完成 入栈/出栈 操作。例如在 ARM 架构,R13 (SP) 指针是堆栈指针寄存器,而 PUSH 是用于压栈汇编指令,POP 则是出栈汇编指令。...如果返回地址存储在堆栈,则可将 lr 用作通用寄存器 程序计数器 (pc):指令寄存器 应用程序状态寄存器 (APSR):存放算术逻辑单元 (ALU) 状态标记副本 当前程序状态寄存器 (CPSR)...:存放 APSR 标记,当前处理器模式,中断禁用标记等 保存程序状态寄存器 (SPSR):当发生异常时,使用 SPSR 来存储 CPSR 上面是栈原理实现,下面我们来看看栈有什么作用。...即使有另外一个任务在等待状态程序是没法从此 main 函数里面跳转到另一个任务。因为如果是函数调用关系,本质还是属于 main 函数任务中,不能算多任务切换。...而 ARM 中断栈内核栈则是共享;中断栈内核栈共享有一个负面因素,如果中断发生嵌套,可能会造成栈溢出,从而可能会破坏到内核栈一些重要数据,所以栈空间有时候难免会捉襟见肘。

3.3K20

Linux

但内核中也用到LDT,那只是在VM86 模式中运行Wine 时, 即在Linux 模拟运行Windows 软件或DOS 软件程序时才使用。...linuxGDT Linux 在启动过程中设置了段寄存器全局描述符表GDT 内容,段定义在include/asm-i386/segment.h 中: #define __KERNEL_CS...,实际Linux 内核不区分数据段堆栈段,这也体现 了Linux 内核尽量减少段使用。...按Intel 规定,每个进程有一个任务状态段(TSS)和局部描述符表LDT,但Linux 也 没有完全遵循Intel 设计思路。...例如arm处理器,由于arm处理器架构比较灵活,一般说arm寄存器并没有内存管理相关寄存器,只说7种模式下16个寄存器,其实arm内存管理需要协处理器CP15去支持。

4.5K20

安卓逆向:这是一篇逆向基础ARM32指令集总结

这是一篇关于ARM32指令集总结文章,后续会不断输出一系列逆向分析破解相关文章。 ? ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。...但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问,取决ARM处理器工作状态及具体运行模式。...ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令异常产生指令六大类。 ?...ARM指令集中跳转指令可以完成从当前指令向前或向后32MB地址空间跳转,包括以下4条指令: 2.1 B 跳转指令 2.2 BL 带返回跳转指令 2.3 BLX 带返回状态切换跳转指令...2.4BX 带状态切换跳转指令 3.程序状态寄存器访问指令 状态寄存器有两个:MRS、MSR MRS指令用于将程序状态寄存器内容传送到通用寄存器中。

1.8K54

Linux下进程创建过程分析(_do_fork do_fork详解)--Linux进程管理与调度(八)

,而且由vfork()创建子进程将先于父进程运行 clone Linux创建线程一般使用是pthread库 实际linux也给我们提供了创建线程系统调用,就是clone fork, vfork...由于系统调用是通过中断进程从用户态到内核态一种特殊函数调用,没有用户态或者内核态堆栈可以被用来在调用函数被调函数之间进行参数传递。系统调用通过CPU寄存器来进行参数传递。..., 保存了调用参数, 该参数使用数据类型是特定体系结构struct pt_regs,其中按照系统调用执行时寄存器在内核栈存储顺序, 保存了所有的寄存器, 即指向内核态堆栈通用寄存器指针,通用寄存器值是在从用户态切换到内核态时被保存到内核态堆栈...当系统发生系统调用,即用户进程从用户态切换到内核态时,该结构体保存通用寄存器值,并被存放于内核态堆栈中) stack_size 用户状态下栈大小, 该参数通常是不必要, 总被设置为0 parent_tidptr...sys_fork实现 不同体系结构下fork实现sys_fork主要是通过标志集合区分, 在大多数体系结构, 典型fork实现方式与如下 早期实现: 架构 实现 arm arch/arm/kernel

2.4K20

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

操作系统有安全级别要求,多模式为了方便操作系统多种角色安全等级需求 ARM寄存器组织 ARM 处理器有 37 个 32 位长寄存器。 1 个用作 PC(程序指针)。...1 个用作 CPSR(程序状态寄存器)。 5 个用作 SPSR(备份程序状态寄存器)。 30 个用作通用寄存器。...两种风格 ARM官方指令风格:指令一般用大写,一般用于Windows开发环境(ADS,MDK等)如: LDR R0, [R1]。 GNU风格:指令一般用小写字母、linux中常用。...- 条件后缀决定了本句代码是否被执行,而不会影响一句下一句代码是否被执行。 多指令流水线 为增加处理器指令流速度,ARM使用多级流水线.,下图为3级流水线工作原理示意图。...ARM 处理器支持 16 个协处理器。在程序执行过程中,每个协处理器忽略属于 ARM 处理器其他协处理器指令。

1.3K10

一文看懂 | fork 系统调用

,而且由vfork()创建子进程将先于父进程运行 clone Linux创建线程一般使用是pthread库 实际linux也给我们提供了创建线程系统调用,就是clone fork, vfork...由于系统调用是通过中断进程从用户态到内核态一种特殊函数调用,没有用户态或者内核态堆栈可以被用来在调用函数被调函数之间进行参数传递。系统调用通过CPU寄存器来进行参数传递。..., 保存了调用参数, 该参数使用数据类型是特定体系结构struct pt_regs,其中按照系统调用执行时寄存器在内核栈存储顺序, 保存了所有的寄存器, 即指向内核态堆栈通用寄存器指针,通用寄存器值是在从用户态切换到内核态时被保存到内核态堆栈...当系统发生系统调用,即用户进程从用户态切换到内核态时,该结构体保存通用寄存器值,并被存放于内核态堆栈中) stack_size 用户状态下栈大小, 该参数通常是不必要, 总被设置为0 parent_tidptr...主要是通过标志集合区分, 在大多数体系结构, 典型fork实现方式与如下 早期实现 架构 实现 arm arch/arm/kernel/sys_arm.c, line 239 i386 arch/i386

89620

一文看懂 | fork 系统调用

,而且由vfork()创建子进程将先于父进程运行 clone Linux创建线程一般使用是pthread库 实际linux也给我们提供了创建线程系统调用,就是clone fork, vfork...由于系统调用是通过中断进程从用户态到内核态一种特殊函数调用,没有用户态或者内核态堆栈可以被用来在调用函数被调函数之间进行参数传递。系统调用通过CPU寄存器来进行参数传递。..., 保存了调用参数, 该参数使用数据类型是特定体系结构struct pt_regs,其中按照系统调用执行时寄存器在内核栈存储顺序, 保存了所有的寄存器, 即指向内核态堆栈通用寄存器指针,通用寄存器值是在从用户态切换到内核态时被保存到内核态堆栈...当系统发生系统调用,即用户进程从用户态切换到内核态时,该结构体保存通用寄存器值,并被存放于内核态堆栈中) stack_size 用户状态下栈大小, 该参数通常是不必要, 总被设置为0 parent_tidptr...主要是通过标志集合区分, 在大多数体系结构, 典型fork实现方式与如下 早期实现 架构 实现 arm arch/arm/kernel/sys_arm.c, line 239 i386 arch/i386

2.1K30

嵌入式软件工程师笔试面试指南-ARM体系与架构

举例来说,我们常说x86 Linux平台实际是Intel x86体系结构Linux for x86操作系统统称;而x86 WinNT平台实际是Intel x86体系结构Windows NT...如果异常中断处理程序中使用它自己物理寄存器之外其他寄存器,异常中断处理程序必须保存恢复这些寄存器) 管理模式(SVC) 管理模式是CPU电后默认模式,因此,在该模式下主要用来做系统初始化,软中断处理也在该模式下...剩下六种模式中除去系统模式外,统称为异常模式。 Arm有多少32位寄存器ARM处理器共有37个寄存器。它包含31个通用寄存器6个状态寄存器Arm24406410有什么区别? 主频不同。...Arm处理器有几种工作状态? 从编程角度来看,ARM微处理器工作状态一般ARMThumb有两种,并可在两种状态之间切换。...若异常是从ARM状态进入,则LR寄存器中保存是下一条指令地址(当前PC+4或PC+8,与异常类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC偏移量,这样,异常处理程序就不需要确定异常是从何种状态进入

1.4K50

Hypervisor Necromancy;恢复内核保护器(1)

具体来说,我们 将展示一个为引导三星 S8+ 而开发最小框架 专有的管理程序作为演示,提供详细信息见解 关于 ARM 低级开发虚拟化扩展关键概念 供感兴趣读者创建自己框架并实际编译 并引导它们...当系统中存在管理程序时,它可以控制各个方面 EL1 行为,例如捕获某些传统处理操作 通过 EL1 到管理程序允许后者决定如何处理 手术。...这 内核还负责引导初始化 RKP。在 另一方面,S10+ 虚拟机管理程序二进制文件驻留在单独分区中,是 由引导加载程序引导,然后由内核初始化。我们会 在随后相应部分中提供更多详细信息。...此外,各种可用预言机将 可以检查后面讨论以验证系统有效性 初始化完成后配置。 堆栈指针 (SP_ELn) 设置为预定义区域,任意大小 每个 8kB。...异常处理程序保存当前 处理器状态(通用状态寄存器)并调用 第二阶段处理程序

2.9K540

C++代码可执行程序在x86arm区别

它使用更多寄存器来完成多个任务,实现了高吞吐量性能。 能量消耗 ARM 处理器一次执行一条指令,它需要较少硬件。与其他处理器相比,该处理器使用寄存器没有更少。...X86 处理器更注重性能高吞吐量,它使用更多寄存器来实现它。因此,这里功耗热量产生更多。 Intel i7 是一款高端处理器,功耗为 130w。...ARM 处理器因其较低功耗较长电池寿命而成为移动设备首选,这对于为任何应用程序选择 CPU 至关重要。...软件 配备 ARM Process 设备可在专为 ARM 开发 Android 操作系统运行。...台式机、笔记本电脑和服务器在为 X86 处理器开发 Unix、Linux Windows 等操作系统运行。

1.2K10
领券