Für Bildungszwecke muss ich einen Linux -Kernel injizieren. Das aktuelle Setup lautet: < /p>
Ein Systemaufruf, der den Fehler injiziert. In meinem Fall sprang ich zu einer zufälligen Adresse, die wahrscheinlich ungültig ist, was einen Kontrollflussfehler simuliert. Hier ist der Code: < /li>
< /ul>
#include
#include
SYSCALL_DEFINE0(fine) {
printk("==== FINE systemcall ====\n");
printk("==== START ====\n");
asm volatile("jmp 0x01");
printk("==== JUMPED ====\n");
printk("==== END ====\n");
return 0;
}
< /code>
Ein C -Programm, das den oben genannten Systemaufruf aufruft und die Fehlerinjektion initiiert. Hier ist dieser Code: < /li>
< /ul>
#include
#include
int main(){
printf("Calling the system call...\n");
printf("syscall output: %d\n", syscall(600)); // custom syscall code (fine_syscall)
printf("System call is called!\n");
return 0;
}
< /code>
Ein virtuelles Linux (Pop -Betriebssystem in VirtualBox) zum Installieren des benutzerdefinierten Kernels und zum Aufrufen des Systemaufrufs. < /li>
< /ul>
Dieses Setup funktioniert (nachdem viele Probleme behoben wurden) und der Systemaufruf wird tatsächlich aufgerufen, aber das Programm wird getötet und hier ist die DMESG < /code> Ausgabe nach Ausführung des Programms:
< Img Alt = "Das Terminalfenster mit der Ausgabe des Befehls sudo dmesg zeigt einen Seitenfehler" src = "https://i.static.net/nsezes1p.png"/>
Ich habe verwaltet Um den Fehler zu injizieren, aber ich möchte diesen Fehler in Fehler und Fehler verwandeln. Vorzugsweise möchte ich, dass das System abstürzt und neu startet. Meine Frage ist, wie kann ich das tun? Oder kann ich das tun, indem ich das Sprungziel auf etwas "weniger" ungültig bearbeite? In Anbetracht meines Wissens über Linux -Kernel (dies ist meine erste Begegnung damit XD), weiß ich nicht wirklich, wie ich den Kernel effektiv schrauben kann. Danke im Voraus: D
So stürmen (und starten Sie) den Linux -Kernel durch Ändern des Programmschusses ab (und starten Sie sie neu) ⇐ Linux
-
- Similar Topics
- Replies
- Views
- Last post