web-dev-qa-db-ja.com

Linuxのreboot()システムコールのマジックナンバー

The Linux Programming Interface は、第3章で次のような演習を行っています。

Linux固有のreboot()システムコールを使用してシステムを再起動する場合、2番目の引数magic2を一連のマジック番号の1つとして指定する必要があります(例:LINUX_REBOOT_MAGIC2)。これらの数字の意味は何ですか? (それらを16進数に変換すると、手掛かりが得られます。)

マニュアルページは、magic2がLINUX_REBOOT_MAGIC2(672274793)、LINUX_REBOOT_MAGIC2A(85072278)、LINUX_REBOOT_MAGIC2B(369367448)、またはLINUX_REBOOT_MAGIC2C(537993216)のいずれかである可能性があることを示しています。 16進数でそれらの意味を解読できませんでした。 /usr/include/linux/reboot.hも確認しましたが、役立つコメントはありませんでした。

次に、カーネルのソースコードでsys_rebootの定義を検索しました。私が見つけたのは、ヘッダーファイルの宣言だけです。

したがって、私の最初の質問は、これらの数字の意味は何ですか? 2つ目の質問は、sys_rebootの定義はどこにあり、どのようにして見つけたのですか。

[〜#〜] edit [〜#〜]kernel/sys.cに定義が見つかりました。私はsys_rebootをgrepしただけで、MAGIC番号のgrepを忘れていました。マクロトリックの背後に定義が隠されている必要があると思ったので、System.mapの下にある/bootファイルを調べ、ctrl_alt_delの横にそれを見つけました。次に、その記号を検索し、正しいファイルに移動しました。ソースコードからカーネルをコンパイルした場合、シンボルを定義したオブジェクトファイルを見つけてそこから移動することができます。

71
Wei Hu

推測だけですが、これらの数値は16進数でより興味深いように見えます。

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

開発者または開発者の子供の誕生日は?

Syscall実装を見つけることに関して、私はgit grep -n LINUX_REBOOT_MAGIC2を実行し、カーネル/sys.cで定義を見つけました。シンボルsys_rebootSYSCALL_DEFINE4(reboot, ...グッビンによって生成されたと思います。

82
araqnid

Linus Torvalds(LinuxカーネルとGitバージョン管理の開発者)と3人の娘の誕生日です。マジックナンバーとして機能し、システムを再起動します。

http://en.wikipedia.org/wiki/Linus_Torvalds

22
Ritwik Dey