问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编(三) -- 栈(sp\fp寄存器)

发布网友 发布时间:2023-05-04 16:25

我来回答

1个回答

热心网友 时间:2023-11-02 08:57

最近准备学习汇编,然后在B站上看到叫iOS小贤的作者发的视频挺不错,打算跟着学,文章是看视频的笔记,最后有原视频链接,想看视频的可以看看通过链接查看视频。

注:用户主动请求而划分出来的内存区域,叫做 Heap(堆)。它由起始地址开始,从低位(地址)向高位(地址)增长。Heap 的一个重要特点就是不会自动消失,必须手动释放,或者由垃圾回收机制来回收。所谓的堆栈溢出是指堆栈开辟的空间碰到了一起,重叠,说明空间不够了。

注:以前push和pop操作的时候需要对寄存器做保护,也就是sp。做压栈的操作sp会挪动,之后需要恢复的时候sp是需要保护的,通过fp保护。现在push和pop取消了fp就显得比较鸡肋,但是要兼容32位,这个寄存器还保留着。

str(store register)指令

将数据从寄存器中读出来,存到内存中。

ldr(load register)指令

将数据从内存中读出来,存到寄存器中

此ldr 和 str 的变种ldp(pair) 和 stp(pair) 还可以操作2个寄存器。

使用32个字节空间作为这段程序的栈空间,然后利用栈将x0和x1的值进行交换。

注:sub是减, sub sp, sp, #0x20 是将ap向底地址挪动32个字节,然后赋值给sp。str是将寄存器里面的值放到内存中,但是str只能操作一个寄存器,stp可以操作两个, stp x0, x1, [sp, #0x10] 是将x0和x1放在 [sp, #0x10] , [sp, #0x10] 是一块内存区域,左边操作数加上右边操作数, [sp, #-0x10] 就是左边操作数减去右边操作数。

我们来写一下

我们来看一下内存地址,输入 0x000000016d57b8e0 ,看到内存开辟了16个字节的空间,当前sp是在6129432800处,前面讲到,写内存是往高地址写,所以 stp x0, x1, [sp, #0x10] 是往高地址写。

现在我们往x0和x1中写入0xffffffff,再ni。

因为 stp x0, x1, [sp, #0x10] 所以是从sp加16个字节出开始存数据。

注:add sp, sp, #0x20 是为了栈平衡,如果不这么做,栈会一直往低地址走,最终内存不够用,但是当函数调用完局部变量是不需要了,所以要回收栈空间。

栈(sp\fp寄存器)
汇编(四)

汇编(三) -- 栈(sp\fp寄存器)

因为 stp x0, x1, [sp, #0x10] 所以是从sp加16个字节出开始存数据。注: add sp, sp, #0x20 是为了栈平衡,如果不这么做,栈会一直往低地址走,最终内存不够用,但是当函数调用完局部变量是不需要了,所以要回收栈空间。栈(sp\fp寄存器) 汇编(四)

STM32F103C8T6的基本参数有哪些?

STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有以下基本参数:1. 工作频率:72MHz2. 外部时钟:最高可达120MHz3. 存储器容量:64K bytes4. 数据总线宽度:32位5. 输入/输出端口: - 串行数字输入:7位数字端口 - 并行数字输入:5位数字端口 - 串行数字输出:2位数字端口 - 并行数字输出:2位数字端口 - 模拟输入:0位模拟端口(AIN1 C,TA1 PD6) - 模拟输出:4位模拟端口(AIN0 ADC1, AIN1 ADC2, AIN1 ADC3, AIN1 ADC4)6. 定时器: - 看门狗定时器:1个 - 任务定时器:4个 - 延迟定时器:2个7. ADC: - 12-bit ADC with PWM …透过STM32您的嵌入式应用将得益于意法半导体优秀的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM Cortex-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微...

什么叫缓冲区溢出

当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容,做为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地址;最后为本地变量留出一定空间,把SP减去适当的数值。下面举个例子:example1.c:--- void ...

理解函数调用栈

本文主要探讨了函数调用栈在arm汇编中的工作原理,涉及到关键寄存器如fp(x29), sp, 和lr(x30)的角色。fp指向当前函数调用栈的栈底,sp指向栈顶,而lr则保存了函数返回后下一条指令的地址。函数调用通过bl指令实现,调用前需确保lr值在内存中保存,以防后续调用修改其值。例如,函数a调用b和b调用c时...

C语言调用汇编程序时,使用哪些寄存器来传递参数?

\r\n寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。\r\n寄存器r15称为程序计数器,记作PC。\r\n2)堆栈的使用规则\r\nATPCS规定堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低...

什么是堆栈?堆栈指针的SP的作用是什么?8051单片机堆栈容量不超过多少...

一个名为堆栈指针(SP)的寄存器指向堆栈的顶部。 堆栈的底部在一个固定的地址。 堆栈的大小在运行时由内核动态地调整。 CPU实现指令 PUSH和POP, 向堆栈中添加元素和从中移去元素。 堆栈由逻辑堆栈帧组成。 当调用函数时逻辑堆栈帧被压入栈中, 当函数返回时逻辑 堆栈帧被从栈中弹出。 堆栈帧包括函数...

推栈方法概览

1. 读取SP寄存器值获取栈顶。2. 获取caller栈顶地址,推断r0寄存器中的callee返回地址。3. 上查找开栈操作,定位上一层栈帧。重复步骤完成栈帧回溯。X86架构的推栈步骤为:1. 通过sp、fp寄存器获取callee的栈帧范围,进而推断caller的栈帧。2. fp+8内存单元保存callee返回到caller的指令地址。重复步骤...

gdb机器语言工具

在gdb中,有四个标准寄存器名称被用来检查和修改计算机的通用寄存器,它们分别是:程序计数器($pc)、帧指针($fp)、栈指针($sp)和处理器状态($ps)。这些寄存器在不同计算机体系结构中的具体名称可能会有所不同,但在gdb中使用时,这些名称提供了一种统一的接口,便于程序开发者进行调试。程序计数...

堆栈溢出堆栈区域

理论上,局部变量可以通过SP加上偏移量来引用,但栈操作可能导致偏移量变化,这可能导致编译器需要额外开销或多条指令。因此,许多编译器会使用FP来稳定地访问局部变量和函数参数,如Intel CPU中的BP(EBP)和Motorola CPU中的除SP外的地址寄存器。在函数调用时,首先保存前一个FP,然后将SP复制到FP以创建...

Mips的帧指针寄存器$fp是干什么用的,怎么用的?

与sp指针配合,构成栈帧,调试回溯时需要。类似于x86中的bp.可参考 http://lambda.uta.edu/cse5317/notes/node34.html

"栈"和"栈帧"这两个概念到底如何区分

栈帧的两个边界分别有FP(R11)和SP(R13)L来限定。栈帧 栈的作用:1)保存局部变量 分析代码:[html] view plain copy include <stdio.h> int main(){ int a;a++;return a;} 反汇编之后的代码;[html] view plain copy stack: file format elf32-littlearm Disassembly of section .text:...

寄存器sp是什么寄存器 汇编栈寄存器 保存当前栈顶地址的寄存器 将标志寄存器保存到栈中 sp寄存器中存放的是 ss和sp寄存器 堆栈寄存器sp 栈寄存器bp 栈寄存器
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
云南省公安厅相关措施 ...am ( ). A.droped , angry B.droped , happy C.dropped ,angry... 个人怎么做工伤鉴定 ...寄一封从上海到无锡的信,邮票要多少,除了邮票还要注意什么,还有贴完... 因投诉导致财付通)账户冻结,怎么才能解冻? 财付通被冻结 原因是交易纠纷 怎么可以解冻 武松打虎中的打虎指的是什么 中考政治题目 2、请从可持续发展的角度,说说我国政府为什么如此重视“节 ... 如果房子提前交房给(业主),那么提前的这段时间物业费谁支付? 哪里能下载音乐《竹林听箫》? //SP=0x60; 为什么在有些单片机函数中要设置栈指针,设置栈指针有什么作用?SP又是什么东西呢? 先谢了! 3d立体棉和海绵有什么区别啊? 3dmimo是在3gpp哪个协议中引入的 3Dmimo和5G共用BBU吗 室内装修龙骨的种类及选购建材中龙骨的作用 龙骨是什么龙骨的作用龙骨的分类 U 型轻钢龙骨 LB50×26中L和B代表什么意思 配资正规在线配资炒股&恒盛策略咋样 转移和转化有什么区别? 机械能转移为内能,和机械能转化到内能哪个对? 机械制造业转移项目有哪些 大锅菜金瓜什么时候放 物理迁移 双色球大小比奇偶比是什么意思 我的世界创世神能不能把别的地图 高级技师退休后有补贴吗 退休有什么要求 女工人专技岗55岁退休 陕西百华盛是骗子吗 华盛和睦府2期现状 华盛控股设计院是做什么的? 中山小榄华盛家具公司待遇好不好 关于单片机的疑问:sfr SPSTAT = 0x84;,SPSTAT |=0x80;SPSTAT & 0x80;这分别是什么意思? 怎么写一个字符变量的空白字符表达式?原题是:字符变量sp是空白字符。求助大神!!! 江铃app什么是车联网 评价车联啥意思 科盲的意思科盲的意思是什么 尚未看到技术盲区的原因 话题:如果你是一个技术文盲,你认为还能生活在今天的世界吗? 一个技术盲怎么建个人网站? 东芝EXCERIA PRO系列32GB CF卡上面有个65的字样,是什么意思啊?真的是技术盲,快来帮我解答一下吧! 《魔兽世界》里,常被简称为“DZ”的职业是? 在it行业里dz是什么意思 sign of app is error什么意思 每天晚上在床头点蜡烛许愿会灵验吗 堂口蜡烛需要天天点着吗 亲人过世天天点蜡奠祭拜有什么不好? 长期点蜡烛有害吗大神们帮帮忙 怎么算两种混合溶液的离子浓度? 渲染软件哪个好 请教JDBC连接Informix的问题的相关推荐 解释一下If x<y Then t=x:x=y:y=t