作者:ThomasKing
时间:2014. 09 .04
前段时间做SO双重解密,发现加载时指令解密时灵时不灵。经过向大大请教讨论,估计是ARM cache未刷新。
在Android Hacker's Handbook P292找到相关解释。
刷新代码(Android arm源码并未实现linux cacheflush函数):
static void clearcache(char* begin, char *end)
{
const int syscall = 0xf0002;
__asm __volatile (
"mov r0, %0\n"
"mov r1, %1\n"
"mov r7, %2\n"
"mov r2, #0x0\n"
"svc 0x00000000\n"
:
: "r" (begin), "r" (end), "r" (syscall)
: "r0", "r1", "r7"
);
}