啥也不会还想学PWN

这篇博客介绍了Linux环境中二进制可执行文件的类型——ELF文件,包括其头部信息的查看方法(readelf -h)以及ELF文件中的各个节如.txt、.rdata、.data、.bss等的作用。还讲解了动态编译与静态编译的优缺点,并重点阐述了动态链接中的延迟绑定机制,涉及PLT、GOT表的工作原理。最后,讨论了动态链接如何通过延迟绑定避免携带大型动态链接库。
摘要由CSDN通过智能技术生成

今天收尾Linux基础。

在Linux环境中,二进制可执行文件的类型是ELF文件,而ELF文件的信息主要存储在ELF文件的头部信息中,这些信息包括指令运行的架构、程序的入口等。那我们如何查看的ELF文件的头部信息呢?指令:readelf -h <elf_name> 。这样就可以查看ELF文件的头部信息。

在ELF文件中,有很多节,放在ELF文件的头部,查看:readelf -S <file>。

.txt:存放程序运行的代码;

.rdata:存放一些字符串等不可更改的数据;

.data:存放一些初始化的可以更改的数据;

.bss:存放未被初始化的程序和可以修改的数据;

.plt和got:程序动态链接函数地址。

动态编辑和静态编辑:

静态编辑:就是将所有可能用到的库函数一同编译到可执行文件中,这样的优点就是可以不需要依赖动态链接库,缺点也很明显:编译后程序体积大,编译速度慢。

动态编译:遇到需要的库函数时,再去动态链接库中找。优点就是缩小了文件体积,同时提高了编译速度,缺点是如果遇到很小的程序,也需要附带一个大的动态链接库。

当然,计算机采用动态编辑。这样为了解决这个动态编译的问题,Linux采用了延迟绑定机制,意思就是:在程序运行初,got表并不保存库函数的地址,只有在调用过一次之后,程序才将之一地址保存在got表中。这样,就不会再去附带一个很大的动态链接库。

PLT,是Linux ELF 文件中用于延迟绑定机制的表。在第一次调用外部函数时,plt表会首跳到对应的got表中。当跳转回plt表的表头,表头就是调用动态解析函数,将目标函数地址存入got表中。

今天到这里了,Linux基础,完。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值