Ich lese gerade 'Linux Kernel Development' von Robert Love und ich verstehe nicht, was dieses Stück Assembly tut.
Grundsätzlich gibt es in jedem Prozess-Kernel-Stack ein struct thread_info
, das sich am Ende des Stacks befindet. Nun, auf der x86-Architektur, können wir dies offensichtlich annehmen (unter Annahme einer Stapelgröße von 8KB), indem wir die folgende Baugruppe verwenden
Also im Grunde ANDing den Stack-Zeiger von 0xffffe000. Ich bin verwirrt, was hier vorgeht? Ich verstehe nicht, warum uns die Maskierung der am wenigsten signifikanten 13 Bits von %esp
in die Struktur bringt. Ich weiß, dass ich mich dumm fühlen werde, sobald es erklärt wird, aber es nervt mich.
Danke.
Der Stapel wächst abwärts, also ist das Ende des Stapels die niedrigste Adresse im Stapel und die Startadresse der Struktur. Und Stapel werden bei Vielfachen von 8 KB gespeichert. Daher erhält das Löschen der 13 niedrigstwertigen Bits die niedrigste Adresse des Stapels und daher den Start der Struktur. Macht das Sinn?