GNU链接脚本的MEMORY命令解析

1、GUN中对MEMORY指令的描述

  • 《GUN的官网描述》

2、MEMORY命令的格式

MEMORY{name [(attr)] : ORIGIN = origin, LENGTH = len…}实例:
MEMORY
{/* 描述设备的内存区域 */rom (rxa) : ORIGIN = 0x80000000, LENGTH = 512Kram (wxa) : ORIGIN = 0x80080000, LENGTH = 512K
}
  • name:内存区域的名字,在链接脚本中使用名字来引用内存区域
  • attr:内存区域的属性
    • r:只读属性
    • w:读写属性
    • x:可执行属性
    • a:可分配属性
    • i :初始化属性
    • l:和i一样的属性
    • !:对后面的属性取反
  • ORIGIN:内存区域的地址地址
  • LENGTH:内存区域的长度

3、链接脚本中相关命令

在这里插入图片描述

  • ORIGIN:获取内存区域的起始地址
  • LENGTH:获取内存区域的长度

4、MEMORY的使用场景

  • 使用MEMORY描述设备的内存区域,方便理解程序加载和内存布局,方便设置各段的加载地址和链接地址。可参考博客:《链接脚本常用命令(KEEP、MEMORY、PROVIDE、ENTRY、AT、ALIGN等)》
  • MEMORY中描述的内存区域属性的作用范围:
    • 属性会被记录在elf头中,内核执行elf文件时会检查属性,如果操作的内存区域不具备该属性会报错
    • 对于裸机程序或者RTOS程序,属性字段没有实际作用
      • 就算你在代码里使用指针明确写了不具备写属性的内存区域,编译也不会报错
      • 裸机程序和RTOS程序使用bin格式而不是elf格式,所以在代码运行中也不会检查内存区域属性
  • 换句话说,MEMORY并不是必须要使用,不在链接脚本中描述内存区域,一样可以正常编译出程序。但是需要代码重定位,使用MEMORY命令还是比较方便的

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity_Visual Effect Graph

Unity_Visual Effect Graph Unity可视化特效渲染虽不及Unreal Engine,然也还是吊打一众其他引擎的,粗浅整理一波吧,需要深入研究的点实在是太多了。 按照常规包管理方式安装Visual Effect Graph插件: 安装之后,示例文件夹中自带资源,拖入场景即可: 场景只是资源的显…

(八)MySQL事务和SQL优化

事务(Transaction): 是数据库内最小且不可再分的单元。通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)。一个完整的业务由批量的DML语句(INSERT 、UPDATE、DELETE)共…

java+springboot电影订票选座及评论网站影评系统ssm+vue

广大观影消费者需要知道自己的空闲时间,在自己可以接受的地理距离范围内,是否有感兴趣的影片可供观看,也需要清楚哪家影院在销售自己需要的电影票;同时手握电影排期及上映信息的电影院的运营者也急需根据消费者的观影需求实时调整…

机器学习---可能近似正确(PAC)、出错界限框架

1. 计算学习理论概述 从理论上刻画了若干类型的机器学习问题中的困难和若干类型的机器学习算法的能力 这个理论要回答的问题是: 在什么样的条件下成功的学习是可能的? 在什么条件下某个特定的学习算法可保证成功运行? 这里考虑两种框架&…

Revit中使用依赖注入

依赖注入的技术已经很成熟,本文主要是说明一下Revit中的适用版本与介绍相关的开源项目。 版本问题 版本 目前的依赖注入包无法支持Revit 2020 以下的版本,原因是因为包中的依赖项与Revit本身的依赖项不一致导致的,所以说如果使用Revit DI…

Python __call__方法(详解版)

我们用 hasattr() 函数判断指定属性(或方法)是否存在,但到底是属性还是方法,则需要进一步判断它是否可调用。程序可通过判断该属性(或方法)是否包含 __call__ 属性来确定它是否可调用。 例如如下程序&#…

计算机设计大赛 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…

Java技术栈 —— Spring MVC 与 Spring Boot

参考文章或视频链接[1] Spring vs. Spring Boot vs. Spring MVC[2] Key Differences Between Spring vs Spring Boot vs Spring MVC

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

【C++】类和对象(二)——构造/析构/拷贝构造函数

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读1. 默认成员函数2. 构造函数2.1 引入2.2 特性2.3 默认构造函数 3. 析构函数3.1 概念3.2 特性3.3 默认析构函数 4. 拷贝构造函…

C语言------函数

C语言的两个重要关键字:static&&extern 会报错,是a未定义,说明局部变量a只能够在内部的括号里面使用; 如果a是全局变量,那么a就全部可以使用; 在不同的文件中,如果想要使用的某个变量没…

万户 ezOFFICE DocumentEdit_unite.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…