Guten Morgen!

Wie der Titel schon sagt, möchte ich gerne die Funktion 'put_queue' des Linuxkernels abfangen. Programmierung im Kernelspace ist völliges Neuland für mich, dennoch hat folgender Code bei mir zu Hause einwandfrei funktioniert:

Code:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>

#define LICENSE "GPL"
#define CODESIZE 7
#define ADDRESS 0xc027a860
#define VERSION "0.1"
 
// global variables:
void (*put_queue)(int) = (void(*)(int))ADDRESS;

static char code[CODESIZE];
static char jump[CODESIZE] =
 "\xb8\x00\x00\x00\x00"
 "\xff\xe0";

// prototypes:
void _put_queue (int ch);

/* ---------------------------------
     function: _put_queue
   --------------------------------- */
void _put_queue (int ch) {
  printk ("keycode: %d\n", ch);

  memcpy (put_queue, code, CODESIZE);
  put_queue (ch);
  memcpy (put_queue, jump, CODESIZE);
}

/* ---------------------------------
     function: init_module
   --------------------------------- */
int init_module (void) {
  *(long*)&jump[1] = (long)_put_queue;
  memcpy (code, put_queue, CODESIZE);
  memcpy (put_queue, jump, CODESIZE);

  return (0);
}

/* ---------------------------------
     function: cleanup_module
   --------------------------------- */
void cleanup_module (void) {
  memcpy (put_queue, code, CODESIZE);
}

// Macros:
MODULE_LICENSE (LICENSE);
Bei meiner Freundin am Rechner kompiliert hat das Modul recht fatale Folgen: der Rechner läuft zwar noch, allerdings bekomme ich keine Tastaturausgaben mehr. Nachdem Entladen des Moduls funktioniert alles wieder einwandfrei.

Wie sich herausgestellt hat, ist wahrscheinlich die Adresse 0xc027a860 falsch - ich habe allerdings keine Ahnung wieso. Ermittelt habe ich sie so:

Code:
lordkefir@linda:~$ grep put_queue /proc/kallsyms
c027a860 t put_queue
c02a5700 t cfq_put_queue
Hier kann doch eigentlich nicht der Fehler liegen, oder? Über jegliche Hilfe wäre ich sehr dankbar...

Mfg, Lord Kefir