Die Linux-Programmierschnittstelle enthält eine Übung in Kapitel 3, die folgendermaßen aussieht:
Wenn Sie den Linux-spezifischen Systemaufruf reboot () zum Neustart des Systems verwenden, muss das zweite Argument, magic2, als eine von mehreren magischen Zahlen angegeben werden (z. B. LINUX_REBOOT_MAGIC2). Welche Bedeutung haben diese Zahlen? (Die Konvertierung in hexadezimal liefert einen Hinweis.)
Die Manpage gibt an, dass es magic2
sich um LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) oder LINUX_REBOOT_MAGIC232 (537) handeln kann. Ich konnte ihre Bedeutung nicht hexadezimal entziffern. Ich habe mir auch angeschaut /usr/include/linux/reboot.h
, was auch keinen hilfreichen Kommentar gab.
Ich habe dann im Quellcode des Kernels nach der sys_reboot
Definition gesucht . Ich fand nur eine Deklaration in einer Header-Datei.
Meine erste Frage lautet daher: Welche Bedeutung haben diese Zahlen? Meine zweite Frage ist, wo ist sys_reboot
die Definition und wie haben Sie sie gefunden?
EDIT : Ich fand die Definition in kernel/sys.c
. Ich habe nur sys_reboot
nach den MAGIC-Nummern gesucht und vergessen. Ich dachte, die Definition muss hinter einem Makrotrick versteckt sein, also schaute ich mir die System.map
Datei unter /boot
an und fand sie neben ctrl_alt_del
. Ich suchte dann nach diesem Symbol, was mich zur richtigen Datei führte. Wenn ich den Kernel aus dem Quellcode kompiliert hätte, könnte ich versuchen, herauszufinden, welche Objektdatei das Symbol definiert, und von dort aus fortfahren.
quelle
Es ist der Geburtstag von Linus Torvalds (dem Entwickler des Linux-Kernels und der Git-Versionskontrolle) und seinen drei Töchtern. funktioniert als magische Zahl, um das System neu zu starten.
http://en.wikipedia.org/wiki/Linus_Torvalds
quelle