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

【ARM 嵌入式 编译系列 10.4.3 -- 查看 bss 段在bin 文件中存在吗?】

文章目录

  • Overview
    • 1. BSS 段在 ELF 中的特点
    • 2. 转换成 binary 文件时
    • 3. 系统运行时 BSS 如何处理

Overview

通过链接脚本生成的 elf 然后在通过 objcopy 生成 binary文件中有bss段中的内容吗?如果有,那么如何从 bin 文件中找到 bss 中的值,比如某个静态变量的值

1. BSS 段在 ELF 中的特点

  • BSS (Block Started by Symbol) 段用于存放 未初始化的全局/静态变量

  • 在 ELF 文件里,BSS 段只会在 Program Header (PT_LOAD) 里占用地址空间,但不会有实际的存储内容。

  • 所以在 ELF 的 Section Header Table 里能看到 .bss,但是它的 Size 大于 0,而 FileOffset 往往是 0(即不会在文件中占字节)。

2. 转换成 binary 文件时

当你用:

objcopy -O binary xxx.elf xxx.bin
  • objcopy 会把 ELF 中的 实际有内容的段(比如 .text, .data, .rodata …)拷贝到 bin 文件

  • BSS 段不会被拷贝,因为它在 ELF 中没有实际数据。

  • 所以在生成的 bin 文件里,你是看不到 .bss 段的内容的。

3. 系统运行时 BSS 如何处理

在程序启动(比如 crt0 或者裸机启动代码)里,启动代码会:

  1. 根据链接脚本,知道 .bss 段的起始地址和大小。

  2. 在初始化阶段,用 memset 或循环把这段内存清零。

    extern char __bss_start__;
    extern char __bss_end__;void clear_bss(void) {for (char *p = &__bss_start__; p < &__bss_end__; p++) {*p = 0;}
    }
    

所以在运行时,所有未初始化的静态/全局变量默认值为 0

在 binary 文件中有 bss 段的内容吗?
没有,bin 文件里没有 bss 的内容。

如果有某个静态变量的值,怎么在 bin 里找到?

  • 如果是 未初始化的静态变量 → 它属于 .bss,所以在 bin 文件里看不到,运行时才由启动代码清零。

  • 如果是 有初始值的静态变量 → 它属于 .data 或者 .rodata,在 bin 文件里可以直接找到初始值。

http://www.dtcms.com/a/462686.html

相关文章:

  • 2024南京icpc区域赛详解与难点解释
  • javascript开发平台
  • DTD 构建模块
  • 嵌入式MCU文件系统技术分享:从选型到FatFS深度应用
  • 手机淘宝客网站建设网页游戏平台软件
  • 企业网站备案怎么搞网站管理助手v3
  • fish怎么用英语说
  • 【NCCL】Ring Allreduce
  • 压缩感知的波达方向估计技术
  • 如何查网站关键词重庆免费网站制作
  • gps的时间基准
  • 网站策划案4500企业黄页的含义是什么
  • 李笑来做的一个网站火是用什么做的视频网站
  • Unity各种报错问题 定位与解决
  • Spring 面试宝典
  • 阳朔县建设规划局网站备案域名租用
  • 网站建设需要哪些工具与知识wordpress图片分享主题
  • 智能化 DDOS 防护平台架构与演进方向
  • 中石化网站是哪个公司做的做企业网站用什么框架
  • 第二步:创建写接口的模块,建立moogodb数据库连接,写添加与查询接口
  • 滑动窗口题目:K 个不同整数的子数组
  • qq网站临时会话静态网站跟动态的区别
  • 阿里云万网建网站家居企业网站建设报价
  • VBA效率大揭秘:选对数据结构,性能飙升300%!
  • LLM 论文精读(九)A Survey of Reinforcement Learning for Large Reasoning Models
  • The “Next“-价值度量与评估
  • 深圳营销网站建设多少钱frontpage网页制作实例
  • 家用电器行业外贸建站世界工厂采购网app
  • synchronized (Java)
  • LINUX——调试器gdb/cgdb的使用