要想实现ELF文件的入口劫持,不深入掌握其运行原理与组成结构那是不可能的。ELF的内部结构复杂,加载逻辑难以理解,因此我们需要通过切香肠的方式,将这个困难的技术点一点一滴的去攻克。
这一节我们先掌握如何读取头部信息和程序表头,我们先看ELF文件的大致结构:
ELF文件格式最重要的就是所谓的段,特别是其中的代码段和数据段。对应上图就是.text,.data两个段。每个段都对应一个段表来描述,而若干隔断会组成一个整体,它对应一个program,而后者则由program header table来指向,讲解ELF数据结构最为详细的就是网址如下,有心的朋友可以认真阅读:
https://man7.org/linux/man-pages/man5/elf.5.html
我们本次要解读ELF文件的两个部分,一个是其文件头。文件头描述了ELF文件很多重要信息,例如它运行的平台,支持的CPU类型等。使用命令行readelf -h 可以读取指定ELF文件的头部信息,如下图所示: