Magische Nummern des Linux-Systemaufrufs reboot ()

72

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 magic2sich 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_rebootDefinition 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_rebootdie Definition und wie haben Sie sie gefunden?

EDIT : Ich fand die Definition in kernel/sys.c. Ich habe nur sys_rebootnach den MAGIC-Nummern gesucht und vergessen. Ich dachte, die Definition muss hinter einem Makrotrick versteckt sein, also schaute ich mir die System.mapDatei unter /bootan 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.

Wei Hu
quelle

Antworten:

93

Nur eine Vermutung, aber diese Zahlen sehen in hex interessanter aus:

672274793 = 0x28121969
 85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000

Kindergeburtstage von Entwicklern oder Entwicklern?

In Bezug auf das Finden der Syscall-Implementierung habe ich eine git grep -n LINUX_REBOOT_MAGIC2und die Definition in kernel / sys.c gefunden. Ich vermute, das Symbol sys_rebootwird von den SYSCALL_DEFINE4(reboot, ...Gubbins erzeugt .

araqnid
quelle
1
Das muss es sein! Ich hätte die Zahlen aufstellen sollen!
Wei Hu
29
Der 28. Dezember 1969 ist das Geburtsdatum von Linus Torvalds [Wikipedia]. Die anderen scheinen das Geburtsdatum seiner Kinder zu sein, obwohl ich nur bestätigen kann, dass eines im Dezember 1996 geboren wurde [zufälliges Googeln].
Eric Seppanen
1
Werfen Sie in ihren Geburtsort und Sie können wahrscheinlich ihre Sozialversicherungsnummern oder etwas erraten ... ;-)
R .. GitHub STOP HELPING ICE
29
Bestätigt, sie sind die Geburtsdaten von Linus und seinen 3 Töchtern. -> nndb.com/people/444/000022378
datiert
1
Ich frage mich, ob Linus 'Töchter es schätzen werden, dass ihre Geburtstage öffentlich sind ...
user541686
23

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

Ritwik Dey
quelle