kernel module?

Dieses Thema im Forum "C/C++" wurde erstellt von badboy, 26.05.2009.

  1. badboy

    badboy Grünschnabel

    Dabei seit:
    26.05.2009
    Beiträge:
    1
    Zustimmungen:
    0
    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

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    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. Yast nicht in der Lage verfügbare Kernelmodule aufzurufen

    Yast nicht in der Lage verfügbare Kernelmodule aufzurufen: Hallo, habe mir seit Kurzem die Opensue 10.2 geholt und probiere nun zum ersten mal Linux aus. Das Programm Yast bricht bei der...
  5. 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...