转自个人博客0pt1mus

0x00 写在开始

首先,我是从PE文件开始学习的,之后接触到了Linux下的ELF文件,在本质上来说,无论是Windows下的PE文件,还是Linux下的elf文件,他们本质上都是一个可执行文件,所运行的平台不同,它们的文件格式也有不同,但究其本质,还是会有互通的地方。

0x01 基础知识

首先,elf文件也是由众多的节构成的,可以通过objdump -h查看。

下面解释.got.plt.got.plt三个节。

.got

GOT(Global Offset Table)全局偏移表。这是链接器为外部符号填充的实际偏移票。

.plt

PLT(Procedure Linkage Table)程序链接表。作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址。它有两个功能,要么在.got.plt节中拿到地址,并跳转。要么当.got.plt没有所需地址的时候,触发链接器去找到所需的地址。

.got.plt

这个是GOT专门为PLT准备的节。保存了重定位地址。.got.plt中的值是GOT的一部分。它包含上述PLT表所需地址(已经找到的和需要去触发的)。

实例

比如printf是一个重定位符号,需要链接该符号时过程是这样:

main函数call .plt段中的一个地址,这里的第一句话就是跳转到.got.plt中的保存的printf的地址,如果是第一次,那么保存的地址就是.plt中的下一句话,这个下一句话就是压入这个符号在.rel.plt中的重定位表的偏移量,然后ld程序就会根据重定位表中的信息加上这个偏移量找到这个地址,保存到重定位表所指向的地址中,这个地址其实就是.got.plt段的一个地址。

第二次调用时就可以直接获取到.got.plt中保存的地址了。

0x02 实践

接下来我们来实践一下,加深对这几个节的认识。

首先要有一个分析的程序,我们用一个helloworld。

//gcc -m32 -no-pie -g -o helloworld_li helloworld.c
//-g 产生有调试符号的程序
#include<stdio.h>
#include<stdlib.h>int main(int argc, char const *argv[])
{puts("Hello World!\n");return 0;
}

用gdb打开该文件,开始分析:

  • 首先反汇编main

  • 找到call puts的地址,用b *0x804844b下断点,r执行到断点处并通过si单步步入。

    我们可以看到当前指令是jmp跳转指令,跳转到0x804a00c。

    我们之前通过objdump查看该文件的各个节,发现0x804a00c是在.got.plt中。

  • 我们使用x/wx 0x804a00c查看这个位置的值。

    发现该地址存着的信息是当前执行指令的下一个位置。所以执行jmp [0x804a00c]后会到0x80482e6的位置。

    这里就可以理解,在第一次执行时,plt在.got.plt中没找到puts函数的地址,然后触发链接器去寻找puts函数的地址。

  • 通过finish执行完当前函数,然后再查看0x804a00c位置的内容。

    可以发现该位置的值已经变了,该地值便是puts函数的地址。

0x03 总结

主要是在学习rop的时候,中间提到了return to libc,通过调用系统函数,而不是shellcode来实现打开shell。有一种方法是return to PLT,因为之前学习的是windows下的,对这个PLT很陌生,因此查资料学习了一下。windows下和linux下,有很多共通的地方,比如说这里的.plt.got.plt同windows下的PE文件输入表中的INTIAT很像。

参考链接:https://www.jianshu.com/p/5092d6d5caa3

elf文件的GOT和PLT相关推荐

  1. ELF文件中的各个节区

    版权声明:本文为CSDN博主「ashimida@」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/lidan1 ...

  2. elf文件中的.plt .rel.dyn .rel.plt .got .got.plt的关系

    .plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成. .rel.plt保 ...

  3. ELF文件的加载和动态链接过程

    本文的目的:大家对于Hello World程序应该非常熟悉,随便使用哪一种语言,即使还不熟悉的语言,写出一个Hello World程序应该毫不费力,但是如果让大家详细的说明这个程序加载和链接的过程,以 ...

  4. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★

    文章目录 一.完整代码示例 二.执行结果 三.博客资源 一.完整代码示例 使用 Python 解析 ELF 文件完整代码示例 : # coding=utf-8 # 解析 elf 文件需要导入的依赖库 ...

  5. ELF文件装载链接过程及hook原理

    ELF文件格式解析 可执行和可链接格式(Executable and Linkable Format,缩写为ELF),常被称为ELF格式,在计算机科学中,是一种用于执行档.目的档.共享库和核心转储的标 ...

  6. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  7. elf文件格式_Android so(ELF) 文件解析

    Android so(ELF) 文件解析 Android so(ELF) 文件解析 前言 生成 so 文件 相关工具 objdump readelf 整体结构图 头部结构 段表结构 字符串表结构 程序 ...

  8. android游戏基址,Android上可执行ELF文件中的段不能有基址

    Android上可执行ELF文件中的段不能有基址 @(Android研究)[android] [TOC] 场景 我使用Android NDK的编译工具交叉编译qemu项目(编译可在Android上运行 ...

  9. SGX初始化中ELF文件解析

    先记 ElfParser::run_parser()函数是SGX初始化<再回顾sgx_create_enclave>慢慢长征路的中间一环.比较独立又有些复杂,单独抽出来讲. ELF文件布局 ...

  10. elf文件从原理到实现个人总结

    总感觉自己什么也没有做,时间就过去了.还是自己慢慢得积累吧. --杰 ELF的前世今生 前言 ELF的结构 设计一个最小的ELF文件 ELF文件的逆向 注明* 前言 什么是elf文件,或许在校园,你听 ...

最新文章

  1. oracle goldengate技术架构-简单试验(全)
  2. storyboard或者Xib给View设置边框属性(颜色,宽度,圆角)
  3. andrew ng machine learning week4 神经网络
  4. 分布式缓存——一致性哈希算法
  5. JMS--Queue实战
  6. 全网最细之static关键字讲解
  7. Win11控制面板里面怎么找到系统安全?
  8. python语句块规范_Python基础语法——代码规范判断语句循环语句
  9. html5复习分类,HTML5考试复习资料.doc
  10. 《八佰》正式上映不到两天 累计票房破6亿元
  11. Java查找一个字符串中所有匹配某正则的子串
  12. SQLSERVER日期时间汇总
  13. 【Unity】12.3 Off Mesh Link组件
  14. pp助手苹果版_曾联合盘古团队开发越狱工具的PP助手将在月底关停iOS相关业务...
  15. 3dmax 使用babylon导出gltf模型异常问题
  16. 在线培训-虚拟演播室嵌入网页直播
  17. 防汛可视化:雨季来临,如何做好防汛措施?
  18. stm32c8t6+dht11+MQ系列环境检测模块+oled显示屏(基于物联网的家庭环境检测系统设计)
  19. 子集和问题 算法_LeetCode 题解 | 78.子集
  20. 计算机二级网上哪里学,计算机二级学习网址

热门文章

  1. EasyTouch5虚拟摇杆(Joystick)中文解析
  2. python误差修正模型_在Python中实现Johansen Test for Cointegration
  3. Hdfview安装教程ubuntu
  4. Matlab图像分割---使用主动轮廓 (snake) 方法进行图像分割
  5. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 时钟和系统控制
  6. java企业员工考勤系统ssm框架
  7. wav音频文件格式解析【个人笔记】(自用)
  8. 使用 Hibernate 二级缓存的步骤
  9. 计算机一级考试广告,2013年计算机一级考试MsOffice备考题及答案(21)
  10. 需求分析解决方案文案,展示图文结合的文案的视觉感。运用屏幕摄影师Snaglt实现屏幕图像文本捕获与编辑,为技术文案的编写提供素材支持。