Linux 动态库hook注入

由于工作上的需要,之前只是对大概的原理了解,现对此进行详细的分析。

涉及到的关键API以及数据结构:

1. ptrace

PTRACE_ATTACH:挂载到指定的pid进程上
PTRACE_GETREGSET:读取目标进程的寄存器
PTRACE_POKETEXT:复制一个word的数据
PTRACE_PEEKTEXT:复制一个word的数据
PTRACE_SETREGSET:设置寄存器
PTRACE_CONT:指定pid进程继续执行

2. waitpid

WUNTRACED:当指定pid进程暂停后,返回

3. struct iovec

向量元素,主要提供给readv和writev系统调用进行使用

4. mmap

5. __libc_dlopen_mode

6. __libc_dlsym

获取指定符号的地址

7. __libc_dlclose

8. /proc/pid/maps

查看每一个so的内存加载地址

9. 设置关键寄存器

sp:堆栈寄存器
pc:程序执行寄存器
cpsr:
lr:函数返回地址
r0:存储函数返回值寄存器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章