ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

链接器把一些独立的 object files 和库文件链接起来,形成可执行文件。在这个过程中,链接器需要解决一些符号的引用以及指令的重定位。

除此之外,还有一个动态链接的过程。比如有些符号是定义在某个 so 文件中的,需要由动态链接器在装载的过程中进行一些符号查找和地址重定位的工作。要完成此工作,动态链接器需要一些信息,它们存储在一些特殊的 section 中,比如 .dynamic。

section 和 segment 是分别针对链接视图和执行视图来说的,各种资料对他们的翻译比较混乱,慢慢就会理解了。

还有一些用于支持调试功能的 section,比如 .debug、.line。下面是一张描述特殊 section 的表格:

.bss:保存未初始化的数据,比如那些未初始化的全局变量。因为是“未初始化”,所以也没必要在文件中占用任何空间去记录其初始值(所以类型为 SHT_NOBITS)。在程序开始运行时,系统会将 .bss 映射的内存区域清零。

.comment:保存版本控制信息。

.data / .data1:保存已初始化的数据。它们会在文件中占用存储空间,这与 .bss 不同。

.debug:保存调试相关的信息。

.dynamic:保存动态链接信息。

.dynstr:保存动态链接所需的字符串。比如符号表中的每个符号都有一个 st_name(符号名),他是指向字符串表的索引,这个字符串表可能就保存在 .dynstr。

.dynsym:保存需要动态连接的符号表。

.fini / .init:分别保存进程退出和初始化时要执行的指令。.init 指令会在程序入口点(main)之前被执行。

.got:保存全局偏移量表 (global offset table)。

在 Android 中,GOT 分为两部分:.got 和 .got.plt。其中 .got 表用来保存全局变量引用的地址,而 .got.plt 用来保存函数引用的地址。

.hash:保存符号哈希表,用于快速查找与其对应的符号表中的符号。

.interp:保存 ELF 程序解释器(比如 Android 下的动态链接器)的路径名。

.line:保存用于调试的行号信息。

.note:保存一些注释信息。

.plt:保存过程链接表 (procedure linkage table)。每个外部定义的函数都会在 PLT 中有对应的一项,用于定位外部函数的地址。

.relname / .relaname:保存重定位表。比如:.rel.dyn、.rel.plt。

.rodata / .rodata1:保存程序中的只读数据。

.shstrtab:保存一个字符串表,这些字符串都是 section 的名字。

.strtab:保存字符串表,类似于 .dynstr,但 .dynstr 中保存的都是那些需要动态链接的符号的名字。

.symtab:保存符号表(非动态链接)。

.text:保存可执行的指令代码。

这些以“.”为前缀的 section 名字为系统保留。应用程序可以构造自己的段,但最好不要与系统已定义 section 节重名,也不要以“.”开头,以避免潜在的冲突。

ELF Format 笔记(五)—— 特殊 Section的更多相关文章

  1. ELF Format 笔记(四)—— 节(Section)

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件可以包含很多 section,所有的 section 都在 section header tab ...

  2. ELF Format 笔记(三)—— Section Types

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件中会包含很多 section,所有的 section 都在 section header tab ...

  3. ELF Format 笔记(十五)—— 符号哈希表

    ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...

  4. ELF Format 笔记(八)—— 符号的类型和属性(st_info)

    我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影.你我相逢在黑夜的海上,你有你的,我有我的,方向:你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然 ...

  5. ELF Format 笔记(十四)—— 段内容

    ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的, ...

  6. ELF Format 笔记(一)—— 概述

    ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的 ...

  7. ELF Format 笔记(二)—— ELF Header

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 以 32 位的 ELF header 数据结构为例: #define EI_NIDENT 16 typede ...

  8. ELF Format 笔记(六)—— 字符串表

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字.当 ...

  9. ELF Format 笔记(七)—— 符号表

    最是那一低头的温柔,像一朵水莲花不胜凉风的娇羞,道一声珍重,道一声珍重,那一声珍重里有蜜甜的忧愁 —— 徐志摩 ilocker:关注 Android 安全(新手) QQ: 2597294287 符号表 ...

随机推荐

  1. Tomcat性能调优方案

    一.操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU的频率,保证文件系统的读写速率等.经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快.. ...

  2. JAVA多线程之间共享数据BlockingQueue介绍

    在JAVA的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利. ...

  3. linux常用命令之文件管理

    LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细信息,包括文件类型.权限.节点.owner. ...

  4. CSS3与页面布局学习笔记(一)——概要、选择器、特殊性与刻度单位

    web前端开发者最最注的内容是三个:HTML.CSS与JavaScript,他们分别在不同方面发挥自己的作用,HTML实现页面结构,CSS完成页面的表现与风格,JavaScript实现一些客户端的功能 ...

  5. 使用异步存储提升 Web 应用程序的离线体验

    localForage 是一个 JavaScript 库,通过使用简单的.类似 localStorage 风格的 API 实现异步存储,帮助你提升 Web 应用程序的离线经验(通过 IndexedDB ...

  6. Subway Icon Set – 306个像素完美的特制图标

    这个图标集是306个优化的像素完美,精雕细琢的图标.为这些设备进行了优化:iOS.Windows Phone.Windows 8 and BlackBerry 10,提供 PNG, SVG, XALM ...

  7. 异常之JSP页面跳转出错

    今天在开发过程中发现一个问题:在页面中使用了<jsp:forward>抛错Attempt to clear a buffer that's already been flushed!! 百 ...

  8. mac(linux) 上如何安装ant

    1.从http://ant.apache.org/srcdownload.cgi下载ant (用ant src编译后装) 2.解压下载下来的内容到一个文件夹,打开终端先进入到刚才解压后的文件夹如:cd ...

  9. C语言32个关键字

    auto   局部变量(自动储存) break无条件退出程序最内层循环 case   switch语句中选择项 char单字节整型数据 const定义不可更改的常量值 continue中断本次循环,并 ...

  10. IOS学习资源收集--开发UI控件相关

    收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文 ...