我正在使用带有 linux-kernel 3.0.31 源代码的 android 4.2.2(Jelly Been)。我正在尝试挂钩打开系统调用,但我不知道如何在给定地址的情况下将页面从只读更改为可写,因为 sys_call_table 是只读的。我已经在 linux Ubuntu12.04 3.2.32 上成功完成了它,下面有 lookup_address() 函数。
int make_rw(unsigned long address)
{
unsigned int level;
pte_t *pte = lookup_address(address, &level);
if(pte->pte &~ _PAGE_RW)
pte->pte |= _PAGE_RW;
return 0;
}
但不幸的是,此功能适用于 x86,而不适用于 arm。我不知道如何在 arm-arch 上做到这一点
另一种方式:基于写保护寄存器
#define CR0_WP 0x10000 //Write Protect Bit (CR0:16)
unsigned long cr0;
cr0 = read_cr0();
write_cr0(cr0 & ~CR0_WP);/* remove write protection*/
hookfunc(){...};
write_cr0(cr0);/* set write protection*/
但我不知道 arm-arch 上的相对寄存器
有没有人解决了这个问题?在线等待解答!