Jeder der schon mal in C++ oder ähnlichem gecodet hat kennt sicherlich das Konzept des Überladen von Funktionen. Die Frage ist jetzt: Kann man das ganze auch noch machen wenn ein Programm schon fertig gebacken ist? Otto würde jetzt sagen "Yiiiaaaaaaaaaah ih ih ih ih" *rumhüpf*
Als Beispiel werde ich hier mal etwas fehlerhaften C-Code kompilieren und im Nachhinein die verantwortliche Funktion mit etwas harmlosen überladen.
Hier erst mal unser fehlerhafter code
#include <unistd.h>
#include <stdio.h>
int main()
{
char buffer[256];
vscanf("%s",buffer);
return 0;
}
Das Ganze segelt in einem herrlichen Segfault ab ^^. Ok, jetzt wollen wir einfach mal die Funktion vscanf mit etwas harmlosen "überschreiben". Dazu werden wir eine Dummy-lib schreiben und diese mit LD_PRELOAD dynamisch in unser Programm linken.
Der Code für unser Lib sieht erst mal so aus:
#include <unistd.h>
#include <stdio.h>
int vscanf(const char* format,va_list ap)
{
printf("override\n");
return 0;
}
Voila, wir haben die Zutaten. Jetzt wird es Zeit für das Rezept:
[raichoo@tessaiga ~]$ gcc test.c -o karpott
[raichoo@tessaiga ~]$ ./karpott
test
Segmentation fault: 11 (core dumped)
[raichoo@tessaiga ~]$ gcc -shared -o override.so override.c
[raichoo@tessaiga ~]$ LD_PRELOAD=./override.so ./karpott
override
Guten Appetit!
Keine Kommentare:
Kommentar veröffentlichen