Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Android so文件浅析,希望能够帮助你!!!。
一. 简述
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. ELF 程序头(32
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
下一篇
已是最新文章