0%

Android读写内存效率比较

众所周知,安卓平台读写内存的方式有

1.read write /proc/xx/mem 文件
2.ptrace
3.syscall
4. 注入读写 (Magisk 注入)

那么他们谁的读写效率更高呢?

测试方法很简单。读写 100000 次,记录时间差

1
2
3
4
5
6
7
8
clock_gettime(CLOCK_MONOTONIC, &old);
for (size_t i = 0; i < 100000; i++)
{
..............
..............
}
clock_gettime(CLOCK_MONOTONIC, &now);
cout << "time passed is: " << (now.tv_sec - old.tv_sec) * 1000 + (now.tv_nsec - old.tv_nsec) / 1000000 << "ms" << endl;

以下是分别测试读写 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