ELF文件的native hook:ELF的运行时状态
💡
原文中文,约9600字,阅读约需23分钟。
📝
内容提要
本文介绍了ELF文件结构和虚拟内存概念,包括虚拟地址映射到物理地址的页映射,共享库的虚拟内存共享,以及导出符号的重定位和hook实现。同时介绍了dl_iterate_phdr函数查询共享库分布情况。
🎯
关键要点
- 本文介绍了ELF文件结构和虚拟内存概念。
- 虚拟内存是程序与物理内存之间的中间层,提供独立的内存空间。
- 地址空间是操作系统分配的内存空间的地址集合,32位计算机最大寻址能力为4GB。
- 虚拟地址到物理地址的映射采用分页映射,减少存储空间消耗。
- 程序在虚拟内存中运行时,首先创建独立的虚拟地址空间,然后映射ELF文件。
- 多个进程可以共享动态链接库(.so文件),提高内存利用率。
- 共享库的可读写段会通过写时赋值技术实现数据隔离。
- ELF文件中有导入符号和导出符号,程序在运行时动态链接库时进行重定位。
- native hook是通过替换重定位地址实现的,可以在不影响其他程序的情况下进行。
- 使用dl_iterate_phdr函数可以查询运行时的共享库分布情况。
- 总结了native hook的基础知识和原理,后续将介绍代码实现。
➡️