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

【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(四)

ELF文件格式内部结构详解(四)

文章目录

  • ELF文件格式内部结构详解(四)
    • 15、ELF 程序初始化和终止部分
      • 15.1 初始化和终止顺序
    • 16、线程局部存储
      • 16.1 本地执行 TLS 访问模型
      • 16.2 Initial-Exec TLS 访问模型
      • 16.3 通用动态 TLS 访问模型
      • 16.4 本地动态 TLS 访问模型

15、ELF 程序初始化和终止部分

一旦程序加载到内存中,其依赖关系得到满足,并且已正确重定位并链接到其共享库依赖项,加载器就可以准备启动程序的核心程序代码了。但在执行此操作之前,它首先需要运行程序的初始化例程。

从语义上讲,C 和 C++ 程序都从包含核心程序逻辑的主函数开始执行,并在主函数返回后立即退出。然而,实际情况要复杂得多。

在 C 编程语言中,类型系统相对有限。定义全局变量时,它们可以静态初始化为某个常量值,也可以保持未初始化状态。在上一节中,我们看到,如果变量已初始化,则变量的初始值将放置在 .data 段中,而未初始化的变量将放置在 .bss 段中。此过程称为静态初始化全局变量。

C++ 编程语言则更为复杂。 C++ 变量可以使用复杂的程序员定义类型,例如类,这些类型可以定义构造函数,使其在变量进入作用域时自动运行,并定义析构函数,使其在变量离开作用域时自动运行。对于全局变量,这些变量在调用 main 函数之前进入作用域,并在程序退出或共享库卸载时离开作用域。此过程称为动态初始化。

以下程序为具体示例:

http://www.lryc.cn/news/579857.html

相关文章:

  • 状态机管家:MeScroll 的交互秩序维护
  • 智能电动汽车 --- 车辆网关路由缓存
  • SAP SD模块之业务功能剖析
  • 京东小程序JS API仓颉改造实践
  • 「AI产业」| 《中国信通院华为:智能体技术和应用研究报告》
  • 【加解密与C】对称加密(四) RC4
  • K8s服务发布基础
  • LiteHub中间件之限流实现
  • git教程-pycharm使用tag打标签
  • 【JavaEE】计算机工作原理
  • 【IM项目笔记】1、WebSocket协议和服务端推送Web方案
  • Angular v20版本正式发布
  • Unity 中相机大小与相机矩形大小的关系
  • Android 网络请求优化全面指南
  • rs-agent论文精读
  • 第十五节:第四部分:特殊文件:XML的生成、约束(了解即可)
  • 【Modbus学习笔记】stm32实现Modbus
  • Python 闭包(Closure)实战总结
  • 万勋科技「柔韧机器人玻璃幕墙清洗」全国巡展@上海!引领清洗无人机智能化升级
  • 读商战数据挖掘:你需要了解的数据科学与分析思维05拟合数据
  • Windows系统下WSL从C盘迁移方案
  • Vue-19-前端框架Vue之应用基础组件通信(二)
  • 算法学习笔记:6.深度优先搜索算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 【办公类-54-07】20250901 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)
  • 使用alist+RaiDrive+webdav将百度夸克网盘变为本地电脑磁盘方法教程
  • 基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
  • 如何搭建 OLAP 系统?OLAP与数据仓库有什么关系?
  • 推荐算法系统系列>推荐数据仓库集市的ETL数据处理
  • BLDC电机-运动控制---stm32时钟树定时器SYSTICKRTC的学习
  • Django Channels WebSocket实时通信实战:从聊天功能到消息推送