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

【DeepSeek】ELF中的dynamic段

dynamic 段详解:定义、内容与生命周期

.dynamic段是 ELF 文件中用于动态链接的核心信息段。它就像程序的“施工图纸”,告诉动态链接器如何加载和初始化程序。

以下从生命周期、结构内容、运行时作用三个维度进行详细解析:

1. 生命周期:编译/链接时决定,运行时读取

这是最核心的概念:.dynamic段是静态产物,而非动态生成物。

  • 生成时间:编译/链接阶段。
    当你执行gcc进行链接时,静态链接器(ld)会分析代码中引用了哪些外部库(如libc.so)。链接器将这些依赖信息、查找规则、表的位置等写入.dynamic段,并固化在硬盘上的 ELF 文件中。
  • 运行时角色:被动读取。
    程序启动时,动态链接器(ld-linux.so)充当“读者”。它读取文件中已有的.dynamic段,根据里面的指示去加载库、解析符号、修正 GOT 表。运行过程中,.dynamic段的内容通常不会被修改。
2. 结构与内容:里面有什么?

.dynamic段本质上是一个结构体数组。数组中的每一项都由一个Tag(标签)和对应的Value(值)组成。

结构定义(Elf64_Dyn):

typedefstruct{Elf64_Sxword d_tag;// 标签:决定这一项是什么类型union{Elf64_Xword d_val;// 整数值Elf64_Addr d_ptr;// 地址值}d_un;}Elf64_Dyn;

主要包含以下几类关键信息:

Tag 类型含义作用说明
DT_NEEDED依赖库列出程序运行必须加载的共享库(如libc.so.6)。链接器会递归加载这些库。
DT_STRTAB字符串表地址指向.dynstr段,里面存着函数名字符串(如"printf")。
DT_SYMTAB符号表地址指向.dynsym段,里面存着符号结构体(名称偏移、哈希值等)。
DT_GNU_HASH哈希表地址用于加速符号查找,避免遍历整个表。
DT_JMPREL重定位表地址指向.rela.plt段,记录了哪些 GOT 条目需要被修正,以及对应的符号信息。
DT_PLTGOTGOT 表地址指向全局偏移表(GOT)的起始地址。这建立了.dynamic与 GOT 的联系。
DT_INIT初始化函数指向_init函数的地址,程序启动时执行。
DT_RPATH库搜索路径指定加载依赖库时的搜索路径。
DT_NULL结束标记数组以 Tag 为 0 的条目结尾。
3. 实例分析:readelf -d 输出

通过命令readelf -d <executable>可以直观看到这些内容:

Dynamic section at offset 0xe28 contains 24 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] <-- 依赖库 0x000000000000000c (INIT) 0x1000 <-- 初始化地址 0x0000000000000004 (STRTAB) 0x300 <-- 字符串表地址 0x0000000000000006 (SYMTAB) 0x2b0 <-- 符号表地址 0x0000000000000003 (PLTGOT) 0x4000 <-- GOT表地址 0x0000000000000017 (JMPREL) 0x380 <-- 重定位表地址 0x0000000000000000 (NULL) 0x0 <-- 结束
4. 运行时机制:与 GOT 的闭环

.dynamic段虽然是静态的,但它指导了动态过程。它与 GOT 表形成了紧密的配合关系:

  1. 定位:动态链接器读取.dynamic中的DT_PLTGOT,找到 GOT 表在内存中的位置。
  2. 依据:链接器读取.dynamic中的DT_JMPREL(重定位表),知道 GOT 表中的哪一项对应哪个函数。
  3. 解析:链接器查找DT_NEEDED中的库,找到函数的真实地址。
  4. 写入:链接器将真实地址写回 GOT 表。
http://www.jsqmd.com/news/638704/

相关文章:

  • 逆向工程实战:内存补丁与DLL劫持技术剖析
  • Alibaba DASD-4B Thinking 对话工具部署详解:Dify平台集成与工作流编排
  • 3步搞定视频字幕提取:本地AI工具完整指南
  • 声音克隆新选择:CosyVoice3对比VITS,3秒复刻优势在哪?
  • ETA6010S2F,可调电流限制功能的精密负载开关
  • 如何阅读一本技术书籍?
  • 如何评估离型剂正规厂家,高性能、环保达标产品选购要点 - 工业推荐榜
  • Spring_couplet_generation 在卷积神经网络视角下的文本生成任务思考
  • 告别重复劳动:5分钟上手KeymouseGo鼠标键盘自动化工具
  • 用于 IntelliJ IDEA 的新 ES|QL 插件
  • 基于VideoAgentTrek Screen Filter的实时直播流内容过滤方案
  • 008、PEFT进阶:QLoRA量化技术与内存优化
  • 如何用SMUDebugTool精准优化你的AMD Ryzen处理器:免费开源硬件调试终极指南
  • 终极B站会员购抢票指南:如何用开源工具告别抢票焦虑
  • 终极显卡驱动清理指南:3步使用DDU彻底解决驱动残留问题
  • TMSpeech:打造Windows本地实时语音转文字的高效助手
  • LinkSwift:2025年八大网盘直链下载助手使用指南
  • 将虚拟机变成服务器
  • HUNYUAN-MT 7B翻译终端Dify平台集成实战:快速构建可视化翻译AI Agent
  • 持久化存储
  • 告别微信群消息转发烦恼:wechat-forwarding自动化消息流转解决方案
  • DeOldify效果展示:黑白电影剧照→高清彩色画面的跨时代视觉重生
  • 分享2026年铝合金门窗生产厂选购要点,哪个口碑好有答案 - mypinpai
  • Ubuntu 24.04 新系统到手,如何快速搞定PyTorch GPU环境?保姆级避坑指南
  • AI写春联实测:达摩院春联生成模型,输入‘平安‘秒出对联,年味十足
  • Bilibilidown下载 1.2.7 哔哩哔哩视频下载
  • SCI论文写作AI辅助工具有哪些?四款写论文的AI软件推荐,知网万方查重轻松通过! - 掌桥科研-AI论文写作
  • 有实力的宁波合规做不锈钢回收的企业分析,怎么选择靠谱的 - 工业推荐榜
  • BGE-M3多语言嵌入部署:100+语言统一向量空间构建方法论
  • CSDN开发者社区Qwen3-TTS-12Hz-1.7B-CustomVoice实战分享