>>how can I make system_call_table address to writable so that one can change to >>customized system call.


Like this:
      unsigned int level;
      pte_t *pte = lookup_address(sys_call_table, &level);
      if(pte->pte &~ _PAGE_RW) pte->pte |= _PAGE_RW;

An awesome example of pretty much what you're trying to do can be found here:
https://github.com/fpletz/kernelroll
Enjoy :D