工作经验总结:RH850中SP、LP、PC寄存器间联系与入栈出栈操作简单整理

news2024/11/25 23:37:40

一、RH850系列中SP、LP、PC寄存器简介

SP:栈顶寄存器,保存最新栈顶的地址

LP:链接寄存器,保存函数跳转的地址(当没发生调用子函数的操作时候,你可以通过单步调试发现,该寄存器的值不变)

PC:指令计数器,当前程序运行的地址

二、运行程序时SP、LP、PC等寄存器作用流程

map文件中的相关地址如下:

  • 栈顶地址:

  • 程序退出地址:

1、开始进入调试时,SP、LP、PC的值

  • PC寄存器值:

  •  SP寄存器值与对应栈地址存放的数据

  •  LP寄存器值

 2、当调用第一个子函数时,SP、LP、PC的值

  • PC寄存器值

  •  SP寄存器值与对应栈地址存放的数据

  •  LP寄存器值

 3、调用子函数运行末尾,SP、LP、PC的值

  • PC寄存器值

  • SP寄存器值与对应栈地址存放的数据

  • LP寄存器值

4、退出子函数时,SP、LP、PC的值

  • PC寄存器值

  • SP寄存器值与对应栈地址存放的数据

  • LP寄存器值

 5、调用包含嵌套函数的子函数时,SP、LP、PC的值

  • PC寄存器值

  • SP寄存器值与对应栈地址存放的数据

  • LP寄存器值

 6、总结

  1. 栈空间由内核自动分配与释放。当调用子函数时候,SP会先将LP中的地址入栈,然后根据函数所需要的局部变量大小分配对应的空间,并偏移对应大小的地址。
  2. 当退出子函数时候,PC会加载LP中的地址,SP进行出栈操作(释放对应的栈空间且数据不会因为出栈而遭到清零,即仅移动SP指针

三、栈溢出时的相关测试

map地址信息与测试数据的地址信息如下:

  • 在子函数中分配相同stack大小的局部变量

  •  对应地址的变量被篡改

 测试总结

1、栈溢出并不一定会导致程序跑飞,但一定会侵占到其他section段中,篡改相关的数据

2、合理的section划分,有助于提高程序的稳健性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang-使用 gvm 进行版本控制

当你想为每个项目切换 go 版本时,gvm (Go Version Manager) 很方便。 这里,我将介绍“如何在Mac上安装gvm”和“如何使用gvm” 使用准备 仅适用于 Mac 的准备工作 按照MacOSX 要求中的说明执行以下命令。 xcode-select --install brew update brew …

JavaFx基础学习【一】:基本认识

一、介绍 JavaFX 是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。 它是许多个人和公司的共同努力的成果,目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。 二、JavaFx应用基本结构 想要开发一款…

浅谈医用IT隔离电源在医院特殊场所接地系统的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】我们国家大部分医院的临床救治和确诊都是利用了医疗电气类设备和医用的医疗仪器,因此这些地方的接地问题应该引起我们的高度的重视。IT系统主要是利用了中性点没有直接接地的方式,所以可以减少电…

【【verilog 典型电路设计之加法器树乘法器】】

verilog 典型电路设计之加法器树乘法器 加法器树乘法器 加法器树乘法器的设计思想是“移位后加”,并且加法运算采用加法器树的形式。乘法运算的过程是,被乘数与乘数的每一位相乘并且乘以相应的权值,最后将所得的结果相加,便得到了…

日常BUG——微信小程序提交代码报错

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用微信小程序开发工具进行提交代码时,报出如下错误: Invalid a…

DDR5内存升级看光威,两款超值DDR5内存条,价格实惠性能强劲

DDR4内存条现在用的人应该占多数,但是时候升级DDR5了,都已经2023年了,国产内存早就崛起了,超值的DDR5内存条选择非常多,特别适合游戏玩家使用,像是光威前段时间推出的两款高端DDR5,神策DDR5 和神…

Java面向对象(内部类)(枚举)(泛型)

内部类 内部类是五大成员之一(成员变量、方法、构造方法、代码块、内部类); 一个类定义在另一个类的内部,就叫做内部类; 当一个类的内部,包含一个完整的事物,且这个事务不必单独设计&#xf…

折线分割平面

一、题目 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目。比如,一条折线可以将平面分成两部分,两条折线最多可以将平面分成7部分,具体如下所示。 Input 输入…

计算机竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于python 机器视觉 的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 🧿 更多资…

Docker自动化部署安装(十)之安装SonarQube

这里选择的是: sonarqube:9.1.0-community (推荐使用) postgres:9.6.23 数据库(sonarqube7.9及以后便不再支持mysql,版本太低的话里面的一些插件会下载不成功的) 1、docker-sonarqube.yml文件 version: 3 services:sonarqube:container_name: sonar…

打造专属企业展示小程序

在当今的数字化时代,企业展示小程序已经成为了推广企业形象和吸引客户的重要工具。而如何打造一个专属的企业展示小程序呢?下面将带您一步步操作,通过乔拓云网来实现这一目标。 首先,您需要注册登录乔拓云网并进入操作后台。在乔拓…

如何修复损坏的DOC和DOCX格式Word文件?

我们日常办公中,经常用到Word文档。但是有时会遇到word文件损坏、无法打开的情况。这时该怎么办?接着往下看,小编在这里就给大家带来最简单的Word文件修复方法! 很多时候DOC和DOCX Word文件会无缘无故的损坏无法打开,一…

String、StringBuffer、StringBuilder三者的异同?

String字符串 不可变的字符序列在 jdk1.8,我们底层用 char [ ] 存储在 jdk 17,我们底层用 byte [ ] 存储 StringBuffer字符串缓冲区类 可变的字符序列,线程安全的(synchronized),效率低在 jdk1.8&#xf…

中大型纯电动旗舰轿车银河E8申报成功,定位“旗舰”,可年内交付

根据工信部的公告,吉利旗下的银河新能源品牌近日成功完成中大型纯电轿车银河 E8的申报。这款令人期待的电动轿车在外观和内饰方面都备受关注。在之前的报道中,我们得知银河 E8拥有时尚、动感的外观设计,线条流畅,给人一种科技感十…

关于vue,记录一次修饰符.stop和.once的使用,以及猜想。

内置指令 | Vue.js 在vue的api里&#xff0c;关于v-on有stop和once两个事件标签。 .stop - 调用 event.stopPropagation()。.once - 最多触发一次处理函数。 原有主要代码和页面效果 &#xff08;无stop和once&#xff09;: ...<div class"div" click"di…

编写时源码优化插件试验品

我又来倒垃圾啦 自己垃圾桶里的这个&#xff1a;egg language server on VSCode | Framist’s Little House 用蛋消灭魔鬼&#xff01;编写时源码优化插件 egg-language-server &#x1f9ea; in developing Source Code Optimization Tools at Writing-time 特性 demo | 点击跳…

Revit SDK: FindColumns 找到和墙相交的柱子

前言 本文的主要内容是基于 ReferenceIntersector 的一个应用。ReferenceIntersector 的主要作用是找到一条与给定射线相交的各个元素。 内容 ReferenceIntersector namespace Autodesk.Revit.DB {public class ReferenceIntersector : IDisposable{public ReferenceInters…

Playwright快速上手-1

前言 随着近年来对UI自动化测试的要求越来越高&#xff0c;,功能强大的测试框架也不断的涌现。本系列主讲的Playwright作为一款新兴的端到端测试框架,凭借其独特优势,正在逐渐成为测试工程师的热门选择。 本系列文章将着重通过示例讲解 Playwright python开发环境的搭建 …

【瑞芯微RK3588】【部署yolov5】学习资料总结

各类教程 1.官网&#xff1a;瑞芯微RK3588板子NPU的使用&#xff1b; 2. 【实测有用】在PC虚拟机上转换模型&#xff0c;再下载到RK3588板子上部署YOLOv5&#xff1b; 3. 在服务器上转换模型&#xff0c;再下载到RK3588板子上部署YOLOv5&#xff1b; 4. github上的各类资料…