android内核系统调用表挂钩

时间:2013-07-15 08:23:24

标签: android kernel-module system-calls

我正在使用android 4.2.2(Jelly Been)与linux-kernel 3.0.31源代码。我试图挂钩开放系统调用,但我不知道如何在给定地址的情况下将页面从只读更改为可写,因为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上的相对注册

有没有人解决过这个问题?在线等待回答!

0 个答案:

没有答案