当前位置: 首页 > wzjs >正文

常见的网站结构类型wordpress 配置ssl

常见的网站结构类型,wordpress 配置ssl,做网站asp和asp.net,人才网官网登录目录 前言 ELF文件布局 链接脚本语法 段定义标准格式 地址计数器 . 地址计数器的动态特性 赋值 vs 引用 符号定义 通配符规则 COMMON块 COMMON 块的产生与处理 示例脚本 前言 由于嵌入式系统内存资源珍贵,链接脚本可指定代码段(.text &#…

目录

前言

ELF文件布局

链接脚本语法

段定义标准格式

地址计数器 .

地址计数器的动态特性

赋值 vs 引用

符号定义

通配符规则

COMMON块

COMMON 块的产生与处理

示例脚本


前言

由于嵌入式系统内存资源珍贵,链接脚本可指定代码段(.text )、只读数据段(.rodata) 、数据段(.data )、未初始化数据段(.bss )等在内存中的存储位置以实现内存布局管控;

链接脚本将多个目标文件(.o )中相同类型的段(如 .text 代码段、.data 已初始化数据段、.bss 未初始化数据段 )合并,构建统一可执行文件;

链接脚本可以控制程序入口地址,定义初始化数据在启动时从 Flash 到 RAM 的搬移规则

ELF文件布局

代码段(.text): 存储可执行的机器指令数据段(.data): 存储已初始化的全局变量和静态变量只读数据段(.rodata): 存储不可修改的数据,比如字符串常量 const修饰的全局变量 常量BSS 段(.bss): 记录未初始化的全局变量和静态变量,不占用文件空间

链接脚本语法

SECTIONS {// 定义各个输出段及其内存布局
}
  • SECTIONS 是链接脚本的关键字,表示开始定义各个段的内存布局;
  • 大括号 {} 内包含所有段的配置信息;

段定义标准格式

段名 [地址] : { 段内容 }
  • 段名:比如 .text.data.rodata.bss等,标识段的类型;
  • [地址]:可选参数,指定具体段的起始地址(如 0x80000000);
  • 冒号(::必须存在,用于分隔 "段名 + 地址" 和 "段内容",是语法结构的核心标识;
  • 段内容:用大括号 {} 包裹,定义哪些输入段需要合并到当前段中(如 *(.text*));
/* 示例脚本 */
SECTIONS {.text 0x08000000 : { *(.text*)}
}

以点开头的段名被定义为系统保留段,以点开头的段名由编译器和链接器 "预留",链接器会默认将以点开头的段名视为标准段,并应用特定的处理逻辑,如果省略点,可能导致链接器无法正确识别段的类型,用户自定义的段通常不以点开头(如my_section),从而避免与系统段名冲突;

my_section : { *(.my_section*) }   // 用户自定义段名

地址计数器 .

. = 0x08000000; /* 设置当前地址计数器为 0x08000000 */
.text : {*(.text*) /* 所有 .text 输入段从这里开始放置 */
}
/* 链接器自动增加 . 的值到 .text 段末尾 */

地址计数器 . 的本质为变量,其值表示下一个将要被分配的地址下一个空闲地址,而非当前已使用的地址,地址计数器 . 始终指向尚未分配的内存位置;地址计数器决定当前正在描述的输出段会被放置到哪个具体地址;

地址计数器的动态特性

地址计数器 .  的值在链接脚本执行过程中会自动变化:

  • 隐式增长: 当你将一个输入段(比如 .text, .data)放入输出段时,链接器会自动将 . 的值增加该输入段的大小,指向该段之后的下一个可用地址;

  • 显式设置: 可以通过赋值语句直接设置 . 的值(例如 . = 0x08000000;),强制将后续内容定位到特定地址;

赋值 vs 引用

. = expression; /* 赋值操作,直接设置 . 的值 */symbol = .; /* 定义符号 symbol 并将其值设置为当前 . 的值, 引用不会改变 . 本身 */

符号定义

symbol = expression; 
  • symbol自定义的全局符号名称(通常以___开头避免冲突);

  • expression基于地址计数器.、内存区域或其它符号的表达式;

@ 链接脚本文件
.data 0x80004000 : {__data_start = .;  @ 记录数据段起始地址*(.data*)          @ 合并所有.data*段( 非语句,无分号)__data_end = .;    @ 记录数据段结束地址
}

链接脚本中定义的符号为强符号(Strong Symbol),不会被其他目标文件中的同名弱符号(Weak Symbol)覆盖;

链接脚本中定义的符号(__data_start 、__data_end)具有全局属性,可在C/C++代码中用extern声明或在汇编文件中直接使用;

@ ARM汇编文件
ldr r0, =__data_start  @ 将链接脚本符号作为立即数加载
汇编器处理机制1. 符号引用: 汇编器遇到 __data_start 时,会将其视为未解析的符号;2. 生成重定位信息: 在目标文件中记录该符号需要链接器解析;3. 链接器解析: 链接阶段,链接器将 __start_start 替换为实际地址值;

链接脚本中定义的符号本身不携带类型信息,在 C/C++ 和汇编文件中,开发者可以通过选择适当的类型声明来安全地使用这些符号;

extern uint8_t __data_start; 
extern void*   __data_start;     

通配符规则

星号 *:匹配任意字符序列

  • 作用:代替 “任意长度的任意字符”,用于匹配不确定的段名前缀、后缀或中间部分。
  • 示例
    • *(.text):匹配所有输入文件中名称以 .text 开头的段(如 .text.text.init.text.fini 等子段 ),常用于合并所有代码段。
    • *.o(.data):匹配所有文件名以 .o 结尾的目标文件中的 .data 段,精准筛选特定文件的段

注意:

  • “动” 则加分号:凡是改变地址(. = ...)或定义符号(__symbol = ...)的 "动作",末尾必须加分号;
  • “静” 则无分号:单纯 “选择段”(*(.text*))或 “引用内容” 的表达式,无需分号;

COMMON块

.bss : {__bss_start = .;*(.bss*)     @ 合并目标文件中的 .bss 段(已分配空间的未初始化变量)*(COMMON)    @ 合并目标文件中的 COMMON 块(未分配空间的未初始化变量)__bss_end = .;
}

早期 C 语言编译器中,对于 未初始化的全局变量,编译器不会为其分配固定大小的内存空间,而是将其标记为一个 "未定义的符号",并记录其类型和期望的大小,此类符号在目标文件(.o文件)中会被组织成 COMMON 块

COMMON 块的产生与处理

1.  示例程序 

// file1.c
int global_var;  // 未初始化全局变量,生成 COMMON 块
// file2.c
int global_var;  // 同名未初始化全局变量,另一个 COMMON 块

    2.  编译后的目标文件

    • file1.o 和 file2.o 中各有一个 COMMON 块,只记录 global_var 为 int 类型(4 字节);
    • 每个目标文件中的 COMMON块不占用实际空间,仅记录符号信息

    3.  链接时的处理

    • 链接器遇到 *(COMMON) 时,将两个目标文件的 COMMON 块合并,为 global_var 分配 4 字节空间,放入 .bss 段;
    • 最终 .bss 段中只有一个 global_var 变量,避免重复定义错误;

    注意:

    • 如果省略 *(COMMON),可能导致未初始化变量无法被正确处理,所以链接脚本中必须写*(COMMON);
    • 为确保完整收集不同编译器生成的未初始化变量,避免因遗漏导致的链接错误或运行时内存错误,因此在链接脚本的 .bss 段中必须同时合并 .bss* 和 COMMON 块

    示例脚本

    SECTIONS {.text 0x80000000 : {*(.text*)}.rodata : {*(.rodata*)}.data 0x80004000 : {__data_start = .;*(.data*)__data_end = .;}.bss : {__bss_start = .;*(.bss*)*(COMMON)__bss_end = .;}.stack 0x80200000 : {. = . + 0x40000;  @ 分配256KB栈空间__stack_top = .;  @ 栈顶地址}
    }


    文章转载自:

    http://vszhrkMq.fLLfc.cn
    http://AOHgMoAF.fLLfc.cn
    http://wmz7bgtb.fLLfc.cn
    http://52g5kCpH.fLLfc.cn
    http://JcBLRyve.fLLfc.cn
    http://8DfEr5eu.fLLfc.cn
    http://zWdNDMZG.fLLfc.cn
    http://SbVwQopO.fLLfc.cn
    http://F8xh3N6v.fLLfc.cn
    http://f6YnDyHL.fLLfc.cn
    http://nWzqNpaF.fLLfc.cn
    http://MUDlovBQ.fLLfc.cn
    http://z3CHtYq0.fLLfc.cn
    http://d0jmw6Z1.fLLfc.cn
    http://wUBx8noy.fLLfc.cn
    http://HKLGkLC3.fLLfc.cn
    http://LxrVOrs0.fLLfc.cn
    http://7NenkAuk.fLLfc.cn
    http://KUJz1PXa.fLLfc.cn
    http://6ANVkYLK.fLLfc.cn
    http://eZYg5Y4r.fLLfc.cn
    http://G510R48w.fLLfc.cn
    http://VNVwEfdh.fLLfc.cn
    http://sO8bDIak.fLLfc.cn
    http://An32hlul.fLLfc.cn
    http://3lD8TleM.fLLfc.cn
    http://A6giCLmG.fLLfc.cn
    http://CKCAFgPY.fLLfc.cn
    http://Ywud5ALr.fLLfc.cn
    http://lWa7e41e.fLLfc.cn
    http://www.dtcms.com/wzjs/653847.html

    相关文章:

  1. 服务器买好了怎么搭建自己的网站如何在网站上推广自己的链接
  2. wordpress 下载站插件合肥建设集团信息网站
  3. 哪个网站可以做推手全球做的比较好的网站
  4. 建设银行支行网站营销外包团队有哪些
  5. 沙朗镇做网站公司微信公众号前端开发
  6. 大型网站怎么做优化西安app定制开发公司
  7. 初二做网站的首页模板wordpress模板页面
  8. 网站虚拟建设策划wordpress仪表盘默认
  9. 中国做的很好的食品网站html5网站有哪些
  10. 手机优化好还是不优化好天津seo关键词排名优化
  11. 长春市建设工程造价管理协会网站手机网站 制作技术
  12. 黄石有没有做网站的网站文章优化事项
  13. 易县网站建设思特奇是外包公司吗
  14. 太原网站运营优化注册一个小程序多少钱
  15. 注册一个做网站的公司好wordpress 评论api
  16. 外贸网站产品分析g3云推广是哪家公司的
  17. 新手自己建网站购物网站seo搜索引擎优化方案
  18. 滇中引水建设管理局网站网站建设建议书
  19. 学做网站用什么软件廊坊seo外包公司费用
  20. 网站改版技术要求公众号里的网站怎么做的
  21. 付网站建设服务费记账哪种语言网站建设
  22. wordpress手机端模板下载失败怎样优化网站排名
  23. 学校的网站是怎么建设的贸易公司做网站
  24. 广州门户网站制作公司用自己网站做淘宝客
  25. 优质的聊城做网站wordpress萨隆
  26. 河北网站建设多少钱网站伪静态如何配置文件
  27. 网络公司网站开发案例洮南市城乡和住房建设局网站
  28. 做采购应该关注的网站沭阳网站设计
  29. 成都网站游戏设计手机网站标准
  30. 城市建设厅官方网站环球资源网发展现状