System call interception in linux-kernel-module (kernel 3.5)

Muss ich ersetzen ein standard-system-Aufruf (z.B. SYS_mkdir) mit meine eigene Implementierung.

Als ich Las in einigen Quellen, einschließlich diese Frage auf Stackoverflow, die sys_call_table wird nicht exportiert symbol seit der kernel-version 2.6.

Habe ich versucht den folgenden code:

    #include <linux/module.h> 
    #include <linux/kernel.h> 
    #include <linux/unistd.h> 
    #include <asm/syscall.h> 

    int (*orig_mkdir)(const char *path); 

    ....

    int init_module(void) 
    { 
            orig_mkdir=sys_call_table[__NR_mkdir]; 
            sys_call_table[__NR_mkdir]=own_mkdir;  
            printk("sys_mkdir replaced\n"); 
            return(0); 
    } 

    ....

Leider erhalte ich compiler-Fehler:

 error: assignment of read-only location sys_call_table[83]’

Wie kann ich ersetzen die system call?

EDIT: gibt es eine Lösung ohne den kernel zu patchen?

  • versuchen mit Typ-cast zu char* dann zuweisen
  • kann sein dieser und dieser ist hilfreich für Sie
  • Es gibt keine universal-Lösung w/o Patches.
InformationsquelleAutor Alex | 2012-12-14
Schreibe einen Kommentar