众所周知,安卓平台读写内存的方式有
1.read write /proc/xx/mem 文件
2.ptrace
3.syscall
4. 注入读写 (Magisk 注入)
那么他们谁的读写效率更高呢?
测试方法很简单。读写 100000 次,记录时间差
1 | clock_gettime(CLOCK_MONOTONIC, &old); |
以下是分别测试读写 100000 次所需要的时间
mem | ptrace | syscall | 注入读写 | |
读 | 155ms | 2983ms | 101ms | 0.000069ms |
写 | 416ms | 2940ms | 88ms | 0.000243ms |
可以看出,效率最快的是注入读写,比 syscall 和读 mem 快了近 1000000 倍.
而 ptrace 效率低很大程度上因为 ptrace 的 PTRACE_ATTACH 和 PTRACE_DETACH 消耗了大量时间.
读写效率:
注入读写 >> syscall > mem > ptrace