《UEFI内核导读》如果没有内存,程序代码还能不能执行?

news2024/11/18 14:27:10

==============================

敬请关注:“固件C字营

    ==============================

       首先思考一个问题,冯洛伊曼架构的计算机如果没有内存,代码能被否正常执行?过程(函数)能不能被相互调用?答案是肯定的,其中的一个实现方法如下。这里只介绍汇编语言的相互调用,如果要用高级语言比如C语言,需要自己实现编译器和ABI才行。

      IA-32支持Intel Streaming SIMD Extensions (Intel SSE),不同版本的SSE支持不同的编程模型和指令。SSE支持8个128bit的XMM寄存器,8个64bit MMX寄存器可以在UEFI环境下使用特定的pinsrd/ pinsrw/ pshufd/movd指令在通用寄存器之间传递数据,进而可以把XMM、MMX寄存器当做普通32bit数据暂存器来使用。如此,我们就可以在堆栈没有准备好的情况下使用JMP跳转指令来模拟一般的call/ret方式调用子过程。

       128bit的XMM寄存器可以被拆分成4个slot,分别与通用寄存器(如:EAX)进行数据传递,参考实现如下。

XMM7:EBP - slot 0, EBX - slot 1, ESI - slot 2, EDI - slot 3

XMM6:ESP - slot 0, EAX - slot 1, EDX - slot 2, ECX - slot 3

XMM5:slot 0 for calling stack,slot 1 for uCode status

MM0: BIST State

MM5: Save time-stamp counter value high32bit

MM6: Save time-stamp counter value low32bit.

MM7: calling stack

例1:

       子过程Function是需要被调用的过程,在堆栈还没有准备好的情况下,可以使用如下代码来实现,只要在Function内部保持通用寄存器不被修改(具体方法是把通用寄存器保存在MMX和XMM寄存器当中)就可以保证Function的调用不会破坏执行环境。

CALL_MMX Function  ;调用子过程,返回地址保存在MM7寄存器

RET_ESI                       ;返回到主过程

例2:

       其中SXMMN和LXMMN宏分别为存储和读取ReturnAddress即调用CALL_XMM指令之后的下一条指令的地址。

CALL_XMM Function  ;调用子过程,返回地址保存在XMM5-Slot0寄存器

RET_XMM                   ;返回到主过程

例3:同理我们也可以使用ebp暂存过程返回地址。

更多导读,尽情期待!

==============================

   敬请猛戳下面链接,关注&转发

敬请关注we-hat“:“固件C字营

点击左下角“分享”,快乐更多人

==============================

we-chat固件C字营

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

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

相关文章

如何在Instagram上开店?Instagram开店教程请收好

Instagram 是国外非常重要的图像分享平台,具有很强的视觉吸引力。更重要的是,它是最受网红欢迎的社交媒体网站之一,每天有超过5亿用户访问它。巨大的流量和高活跃度,为卖家提供了大量的营销机会。而且最重要的是,现在在…

唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装、基础知识)

1. Go语言简介 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收&#xf…

day12|层序遍历合集、226.翻转二叉树、101.对称二叉树

目录 层序遍历合集 102.二叉树的层序遍历 107.二叉树的层次遍历II 199.二叉树的右视图 637.二叉树的层平均值 429.N叉树的层序遍历 515.在每个树行中找最大值 116.填充每个节点的下一个右侧节点指针 117.填充每个节点的下一个右侧节点指针II 104.二叉树的最大深度 11…

Hi3861鸿蒙物联网项目实战:智慧农业

华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器、执行器、NFC、显示屏等,同时还配套丰富的拓展模块。开发板配套丰富的学习资料,包括全套开发教程…

联合体(共用体) :(笔记补充)

目录 一.联合体的基本概念 二.相关面试题 三.联合体大小计算 关于结构体的内存对齐:http://t.csdn.cn/fbQuo 一.联合体的基本概念 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以…

jar转成dex文件 dex文件转化为smali文件

jar转成dex文件 dx 可以利用android studio中的dx工具。 可以看到android的tool安装位置: 在此路径下的如下目录有dx.bat,这个正是我们需要使用的工具。 D:\sdk\build-tools\30.0.3将dx.bat添加到环境变量 基本指令 > dx --dex --output 输出路径 待转化的jar包C

MySQL通过 XtraBackup 备份恢复单个库

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:王权富贵文章来源:GreatSQL社区原创 1.概述 本文通过 XtraBackup 备份单个数据库,然后…

Elasticsearchdump 数据导入/导出

一.安装过程 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据迁移相关,使用elasticdump工具需要使用到npm,所以需要安装相关的依赖 目前使用到的ES版本是7.x 安装NODE 通过npm安装elasticdump # 本地安装和全局安装的区别在于…

3.25 haas506 2.0开发教程-充电电压检测

haas506 2.0开发教程-充电检测1.案例说明2.硬件准备连线3.代码4.测试1.案例说明 可以通过USB端口对连接在开发板上的锂电池进行充电,USB最大供电电压5V。案例使用锂电池供电。通过原理图看到使用ADC2读取锂电池电压,并且采集电压做了分压处理&#xff0…

第六篇 VGGNet——模型精讲

文章目录 1、模型介绍网络结构3 模型特性1、模型介绍 VGGNet是通过简单堆叠卷积构建网络的巅峰之作,在后面的模型就是ResNet这种残差网络的时代。 VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了201…

为什么我们的微服务中需要网关?

玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既写过相关的文章,也录过相关的视频跟小伙伴们介绍 Spring Cloud Gateway,不过在之前的介绍中,我可能更加侧重于跟小伙伴们介绍 Sp…

接到新需求时,从何开始设计?

即便我们能够极尽所能把代码写整洁,规避各种坏味道,但我们小心翼翼维护的代码,还是可能因为新的需求被破坏。 新的需求总会在路上,所以,写代码时需要时时刻刻保持嗅觉。 实现驳回 有个功能,内容作品提交…

lxmlxpath一站式教学

文章目录XPath定义XPath 概览安装lxml初步使用xpath 常用表达式获取所有节点获取子节点获取父亲节点属性匹配获取文本获取属性属性多值匹配多属性匹配按序选择节点轴选择总结XPath定义 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历…

OMNet++安装pydev

菜单栏->Help->Install New SoftWare->Add 输入 Pydev http://pydev.sourceforge.net/pydev_update_site/5.2.0链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。\color{blue}{链接为下载5.2.0版本&#xff0c;若jdk<1.8安装5.2.0之前的版本。}链…

无代理Bean对象Spring循环依赖处理

Bean A和B互相依赖 A对象或者B对象,创建对象时会形成死循环,解决: Spring中创建对象:实例化、初始化 闭环:此时,图中是一个闭环,如果想解决这个问题,那么就必须要保证不会出现第二次创建A(B)对象这个步骤,也就是说从容器中获取A的时候必须要能够获取到 思考,在spring…

RabbitMQ(三)工作原理及核心概念

目录工作原理图1.Connection 连接2.Channel 信道3.Virtual host 虚拟主机4.Queue 队列5.Exchange 交换机5.1 direct5.2 fanout5.3 topic5.4 headers官网地址&#xff1a;https://www.rabbitmq.com/ 下载地址&#xff1a;https://www.rabbitmq.com/download.html RabbitMQ 的5大…

chk文件恢复和文件恢复的区别有哪些?

文件恢复也就是我们常说的数据恢复&#xff0c;一般用于恢复误删除、损坏的文件数据&#xff0c;那么chk文件恢复又是什么意思呢&#xff1f;两者有什么区别呢&#xff1f;文件恢复市面上常见的文件恢复软件&#xff0c;一般都是用于恢复那些被删除、损坏的文件数据恢复&#x…

Jenkin权限控制——项目矩阵授权策略

开启授权策略 Jenkins的项目权限控制通过【授权策略】实现&#xff0c;【授权策略】需要plugins提供&#xff0c;首先需要安装Role-based Authorization Strategy 安装Role-based Authorization Strategy 管理Jenkins——》插件管理——》搜素——》Role-based Authorizatio…

距离教资考试还有两天,你的照片准备好了没有?

距离教资考试还有两天不知道你的教资报名照准备好了没有?照片不合格可是不能报名成功的&#xff01; ​ ​ 1、本人近6个月以内免冠正面彩色证件照 2、一寸白底&#xff0c;比例3:4 3、不允许戴帽子、头巾、发带、墨镜 4、照片中显示考生头部和肩膀上部 5、照片为jpg或jpe…

云游戏渐入佳境,众玩家同行不同路

配图来自Canva可画 有人曾在2019年问道&#xff1a;“云游戏能成为5G第一个2C的杀手级应用吗&#xff1f;”在当时&#xff0c;几乎所有人对这个问题的回答&#xff0c;都有一种“只缘身在此山中”的迷雾感&#xff0c;还看不清脚下的路会延伸到何处。彼时各大厂商都在备战&am…