一. 简述
Android中的so文件是动态链接库,是二进制文件,即ELF文件。多用于NDK开发中。
二. 基础知识
三. so文件格式解析
so文件即ELF文件,是一个二进制文件,我们可以用UltraEdit打开查看。如下:
上面有一处很明显看到,在so文件解析出来的头文件字段是ELF,也印证.so是一个ELF格式的问题。
ELF文件中各个结构体的内容,我们可以看源码中如下路径:
platform/external/kernel-headers /original/uapi/linux/elf.h
下面来逐步解析这个ELF文件
1. ELF 头部(32bit/64bit)
可以看到e_ident[EI_NIDENT] 这个就是ELF 魔术数字(ELF magic number)
几个字段需要关注下,在so加固中修改so会用到:
E_phoff:注释写的很明确,这是程序表头的偏移值;
E_shoff:段表头的偏移值;
E_shstrndx:
2. ELF 段头(32bit/64bit)
p_offset:段文件偏移
p_vaddr:段虚拟地址
p_paddr:段物理地址
p_filesz:段大小在文件中
3