so加密笔记
基础知识
一、ELF文件
(更详细可看 elf讲解)
ELF是Linux下的可执行连接格式文件,类似于windows下的PE文件。
ELF文件(目标文件)格式主要三种:
可重定向文件(Relocatable file):文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件。(目标文件或者静态库文件,即linux通常后缀为.a和.o的文件)这是由汇编器汇编生成的 .o 文件。后面的链接器(link editor)拿一个或一些 Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对象文件(Shared object file),内核可加载模块 .ko 文件也是 Relocatable object file
可执行文件(Executable file):文件保存着一个用来执行的程序。(例如bash,gcc等)
共享目标文件:即 .so 文件。如果拿前面的静态库来生成可执行程序,那每个生成的可执行程序中都会有一份库代码的拷贝。如果在磁盘中存储这些可执行程序,那就会占用额外的磁盘空 间;另外如果拿它们放到Linux系统上一起运行,也会浪费掉宝贵的物理内存。如果将静态库换成动态库,那么这些问题都不会出现
1.1 ELF 文件结构
elf文件主要有两种格式,一是链接状态、二是运行状态。
这里再放一张 32位数据类型,方便理解。