news 2026/6/29 18:21:59

【学习记录】Week2(一):深入 ELF 结构视图与 .got/.plt 节区作用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【学习记录】Week2(一):深入 ELF 结构视图与 .got/.plt 节区作用详解

写在前面:进入 Week2,我们需要把目光从宏观的保护机制下沉到微观的文件结构中。在平时用readelfobjdump分析二进制时,我们经常会看到“节区”和“段”这两个词。它们到底有啥区别?我们天天喊的“打 GOT 表”,GOT 表到底在文件结构的哪个位置?本文将为你彻底讲透。

📑 目录

  1. ELF 双视图:节区 与 段 的本质区别
  2. 核心节区速览
  3. 动态链接的枢纽:.plt 与 .got 详解
  4. PWN 视角:为什么要区分 .got 和 .got.plt?

1. ELF 双视图:节区 与 段 的本质区别

ELF (Executable and Linkable Format) 文件可以从两个不同的维度来看待:链接视图执行视图。这也是节区和段的最根本区别。

1.1 链接视图(节区 Section)

  • 服务对象:链接器。
  • 作用:链接器需要知道代码放在哪、数据放在哪、符号表在哪。因此 ELF 被划分成了无数个细分的“节区”。
  • 特点:粒度极细。比如.text(代码)、.data(已初始化全局变量)、.bss(未初始化全局变量)都是独立的节区。

1.2 执行视图(段 Segment)

  • 服务对象:操作系统的程序加载器。
  • 作用:加载器在把程序载入内存时,不需要知道.text.rodata的区别,它只关心“这块内存需要可读可执行,那块内存需要可读可写”。为了节约内存页的开销,加载器会将多个属性相同的节区合并成一个“段”来加载。
  • 特点:粒度较粗。

💡 假设性说明(模拟readelf输出):
假设我们在终端输入readelf -l vuln(查看段信息),你会在输出中看到类似这样的对照关系:

Section to Segment mapping: Segment Sections... 00 .interp 01 .interp .note.gnu.property .note.ABI-tag ... 02 .init .plt .plt.got .text .fini <-- 合并成了可执行段 03 .rodata .eh_frame_hdr .eh_frame <-- 合并成了只读段 04 .init_array .fini_array .dynamic .got .data .bss <-- 合并成了可读写段

从上面的模拟输出可以直观看到:.plt.text被打包在一起执行;而.got.data被打包在一起读写。节区是逻辑划分,段是物理装载。

2. 核心节区速览

在 PWN 中,我们最常打交道的几个节区如下:

节区名称说明PWN 关注度
.text存放程序编译后的机器指令。通常只读可执行。⭐⭐⭐ (找 ROP Gadget、后门函数)
.bss存放未初始化的全局/静态变量。运行时在内存中分配并清零。⭐⭐ (ret2shellcode 或 堆利用占位)
.data存放已初始化的全局/静态变量。⭐⭐ (查数据)
.rodata只读数据,比如字符串常量"/bin/sh"⭐⭐⭐ (找/bin/sh地址)
.got/.plt动态链接跳板与地址表。⭐⭐⭐⭐⭐ (核心攻击目标)

3. 动态链接的枢纽:.plt 与 .got 详解

在 Week1 我们讲过“懒绑定”机制,程序在第一次调用外部函数时才去寻找真实地址。这个过程就是靠.plt.got配合完成的。

3.1 .plt (过程链接表)

  • 属性:属于代码段,可读可执行(通常不可写)。
  • 作用:它是一段段极其精简的跳板代码。程序中call printf,实际上汇编是call printf@plt
  • 内部结构:每个外部函数在.plt中都有一个小项(比如 16 字节)。它的核心逻辑是:“去.got表里查地址并跳转过去”

3.2 .got (全局偏移表)

  • 属性:属于数据段,可读可写(除非开启了 Full RELRO)。
  • 作用:它本质上是一个指针数组。每个表项占 4 字节(32位)或 8 字节(64位),用来存放外部函数在 libc 中的真实绝对地址。

4. PWN 视角:为什么要区分 .got 和 .got.plt?

readelf -S查看节区时,你可能会发现有两个长得像 GOT 的东西:.got.got.plt。它们有什么区别?

4.1.got

这个表主要用于存放全局变量的地址(比如引用其他动态库中的全局变量)。在 PWN 中较少直接作为主要攻击目标。

4.2.got.plt(重点中的重点)

这个表专门用于存放外部函数的真实地址(如puts,system,gets)。这就是我们常说的“打 GOT 表”的那个表。

.got.plt表的特殊结构(前 3 项是特殊数据):

  1. 第一项:存放.dynamic节的地址(动态链接器使用)。
  2. 第二项:存放link_map结构的地址(动态链接器使用)。
  3. 第三项:存放动态链接解析函数_dl_runtime_resolve的地址。
  4. 第四项及以后:才是我们熟悉的puts@gotgets@got等。

4.3 攻击逻辑复盘

在 Partial RELRO(部分保护)下,.got.plt是可写的。

  1. 程序调用puts,第一次执行时,动态链接器找到puts在 libc 的地址,比如0x7ffff7a649c0,然后把这个地址写入.got.plt表中puts对应的表项里。
  2. 下次再调用puts,程序直接从.got.plt读出0x7ffff7a649c0并跳转。
  3. 攻击发生:如果我们通过栈溢出或格式化字符串漏洞(任意地址写),把.got.plt表中puts的表项内容,篡改成system函数的地址0x7ffff7a4c440
  4. 程序再次执行puts("hello")时,去.got.plt读地址,读出的是system的地址,于是实际执行了system("hello")

这就是经典的GOT Table Overwrite(GOT 表覆写)攻击。而开启 Full RELRO 的原理,就是在程序启动时一口气解析完所有函数地址填入.got.plt,然后直接把这块内存设为只读,从根源上掐断覆写可能。

5. 结语

理解了 ELF 的双视图以及.got.plt表的精确结构,我们就能在后续实战中精准地算出目标函数 GOT 表的绝对地址。下一步,我们将学习如何利用泄露出来的地址,反查libc版本并计算system函数的偏移量。

如果本篇文章对您有帮助,请点赞收藏支持一下,感谢阅读!我们下一部分见!🙏

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 18:21:01

学习C#开源报表组件Seal Report(2:配置数据库连接)

Seal Report组件基于数据源生成报表&#xff0c;Seal Server Manager和Seal Report Designer都支持创建数据源&#xff0c;前者创建的数据表会被所有报表共享&#xff0c;适合那些在多个报表中都会用到的公共数据表&#xff0c;而后者创建的数据表仅对当前报表文件有效&#xf…

作者头像 李华
网站建设 2026/6/29 18:18:49

FocusWriter终极指南:如何用免费专注写作工具提升创作效率3倍

FocusWriter终极指南&#xff1a;如何用免费专注写作工具提升创作效率3倍 【免费下载链接】focuswriter Simple fullscreen word processor. 项目地址: https://gitcode.com/gh_mirrors/fo/focuswriter 你是否经常在写作时被各种通知和界面元素分散注意力&#xff1f;Fo…

作者头像 李华
网站建设 2026/6/29 18:16:01

Ubuntu 磁盘排查必备:sudo du -sh * 与 du -shx /var/lib/docker 用法详解与实战

前言 在 Ubuntu 服务器运维中,磁盘空间爆满是最常见的故障场景之一,而 du 命令是定位目录占用、排查大文件的核心工具。其中 sudo du -sh * 和 sudo du -shx /var/lib/docker 是两个使用频率极高的组合:前者用于逐层定位大目录,后者用于精准统计 Docker 数据总占用。本文详…

作者头像 李华
网站建设 2026/6/29 18:14:52

易语言大漠插件模块实战:精准定位窗口句柄的FindWindow系列命令封装

1. 易语言与大漠插件基础入门 如果你正在接触自动化脚本开发或者游戏辅助工具制作&#xff0c;那么精准定位目标窗口是绕不开的技术门槛。易语言作为国内广泛使用的编程语言&#xff0c;搭配功能强大的大漠插件&#xff0c;能够快速实现窗口操作相关的各种功能。我在实际项目中…

作者头像 李华
网站建设 2026/6/29 18:14:29

逻辑漏洞挖掘实战指南:从核心思路到业务场景深度解析

1. 从“想当然”到“找茬”&#xff1a;逻辑漏洞的本质与价值干了这么多年安全测试&#xff0c;我越来越觉得&#xff0c;逻辑漏洞的挖掘&#xff0c;与其说是一门技术&#xff0c;不如说是一种思维习惯。它不像SQL注入或者XSS那样&#xff0c;有明确的攻击载荷和自动化工具可以…

作者头像 李华
网站建设 2026/6/29 18:13:40

康宁Glass Bridge颠覆CPO-高通HBC下沉手机-AI算力连接革命

康宁Glass Bridge颠覆CPO高通HBC架构下沉手机&#xff1a;AI算力的"连接革命"&#xff0c;从数据中心到指尖当AI算力的瓶颈不再只是"算得快不快"&#xff0c;而是"连得快不快"——一场从光纤到芯片堆叠的连接革命正在悄然改写AI基础设施的未来。…

作者头像 李华