kernel module?

Diskutiere kernel module? im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hallo liebe Community, Also beschäftige mich nun eine Weile lang mit Kernel Programmierung. Was ist mein Ziel? Ich will sys_calls umleiten,...

  1. badboy

    badboy Gast

    Hallo liebe Community,


    Also beschäftige mich nun eine Weile lang mit Kernel Programmierung. Was ist mein Ziel?
    Ich will sys_calls umleiten, so dass z.b. wenn ein sys_read, sys_write etc. gemacht wird, eine Ausgabe wie "Befehl geloggt" ausgegeben wird.

    Da die SysCallTable seit dem 2.6.x Kernel ja nicht mehr exportiert wird, habe ich hier verschiedene Ansätze.
    1) Über ein Codestück, welches den Memory durchläuft und nach der Sys_Call_Table sucht.
    2) Über System.map
    3) Über /proc/kallsyms

    Mein Modul nimmt nun die Adresse der SysCallTable als Parameter entgegen:
    Code:
    #include <linux/string.h>
     
    #include <linux/smp_lock.h>
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/kernel.h>
    #include <linux/file.h>
    #include <linux/fs.h>
    #include <linux/sched.h>
    #include <linux/syscalls.h>
    #include <linux/time.h>
    #include <asm/unistd.h>
    #include <linux/version.h>
    #include <linux/errno.h>
    #include <linux/dcache.h>
    #include <linux/mm.h>
    #include <asm/uaccess.h>
    #include <asm/string.h>
    #define __KERNEL_SYSCALLS__
    #include <linux/dirent.h>
    #include <linux/fcntl.h>
     
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("bli bla blu");
     
    unsigned long sctable_addr;
    module_param(sctable_addr, ulong, S_IRUGO);
     
    asmlinkage int (*original_sys_exit)(int);
     
    asmlinkage int our_fake_exit_function(int error_code)
    {
            printk("HEY! sys_exit called with error_code=%d\n",error_code);
     
            /*call the original sys_exit*/
           // return original_sys_exit(error_code);
        return 1;
    }
     
    /* main function entry point */
    static int __init readlog_init(void)
    {
        void **sctable = (void **)sctable_addr;
            if (sctable == NULL)
                    return -EINVAL;
     
        printk(KERN_INFO "%p\n", sctable[__NR_write]);
        printk(KERN_INFO "\n%p\n", sctable[0]);
     
        printk(KERN_INFO "SysCallTable is located at: %p\n", sctable);
        printk(KERN_INFO "SysCallWrite is located at: %p\n", sctable[__NR_write]);
        printk(KERN_INFO "SysCallRead is located at: %p\n", sctable[__NR_read]);
        printk(KERN_INFO "SysCallOpen is located at: %p\n", sctable[__NR_open]);
        printk(KERN_INFO "SysCallFork is located at: %p\n", sctable[__NR_fork]);
     
     
        /*store reference to the original sys_exit*/
            original_sys_exit=sctable[__NR_exit];
        printk(KERN_INFO "Exit: %p\n", sctable[__NR_exit]);
              sctable[__NR_exit]=our_fake_exit_function;
     
        printk(KERN_INFO "UNTIL HERE\n");
     
     
           return 0;
    }
     
    static void __exit readlog_exit(void)
    {
    /* You MUST restore sctable[__NR_exit] or the system will crash soon */
        printk(KERN_ALERT "\nModule unloaded\n");
     
        return;
    }
     
    module_init(readlog_init);
    module_exit(readlog_exit);
    
    Nun, was passiert?
    Mal sehen:
    Wie man also sieht bricht er mit einer Segmentation Fault genau an dieser Zeile ab:
    Code:
    sctable[__NR_exit]=our_fake_exit_function;


    Arbeite nun seit Wochen daran und finde keine Lösung.
    Ist das ne WriteProtection?
    Was läuft falsch?

    Hoffe jemand kann mir unter die Arme greifen, schonmal danke!
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

kernel module?

Die Seite wird geladen...

kernel module? - Ähnliche Themen

  1. Kernelpanic bei XEN installation, modules.dep wird nicht gefunden

    Kernelpanic bei XEN installation, modules.dep wird nicht gefunden: Hi, ich habe Probleme bei einer XEN Installation. Debian 5.0.0 und XEN 3.3.1 Debian als Standard installiert, benötigte Pakete nachinstalliert...
  2. KDE Kontrollzentrum (Toshiba Notebook) Fehler: Kein Toshiba kernel module gefunden

    KDE Kontrollzentrum (Toshiba Notebook) Fehler: Kein Toshiba kernel module gefunden: Hallo Leuts, ...schon wieder das Toshiba Portege r500 ( ppr50e-03902MGR ).... Diesmal: Die FN-Tasten funktionieren nicht richtig...
  3. Vermeintliches neuer Kernel lädt alte Module

    Vermeintliches neuer Kernel lädt alte Module: Vermeintlicher neuer Kernel lädt alte Module Hallo zusammen, zuerst eine Kurzvorstellung: Bin 26, studiere Informatik und spiele seit gut 5...
  4. neuer kernel - /lib/modules... no such file or directory

    neuer kernel - /lib/modules... no such file or directory: Hi, Ich bin Linux Neuling (SUSE 10.0) und habe mir gedacht, ich versuche mal, einen neuen Kernel, der auf meine Anforderungen angepasst ist zu...
  5. 'Failed to load the NVIDIA kernel module'

    'Failed to load the NVIDIA kernel module': Hi, habe nun vor kurzem SuSe Linux 10.1 installiert. Jetzt wollte ich für meine geForce 6800 GT den nVidia Treiber installieren. über Yast...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden