System.mapファイルにシンボリックアドレスが含まれていることがわかりました。システムコールが関係していますか?新しいカーネルがコンパイルされたときにのみ更新されることがわかりました。
もしそうなら、これは新しいカーネルコンパイルを除いて、常に同じアドレスに保存されることを意味しますか?
答え1
System.map
含む記号表つまり、各関数コードのアドレスがメモリにロードされるLinuxカーネルの関数名のリストです(このアドレスは物理アドレスではなく、カーネルにロードされた実行可能シンボルテーブルと同様にカーネルのアドレス空間にあります)。プロセスアドレス空間)。これは、システムコール(ユーザープロセスに公開されるインターフェイス)に限定されません。ファイルには、ロードされたモジュールから呼び出すことができる関数、さらには内部関数も一覧表示されます。システムコールは名前で始まる記号ですsys_
。
アドレスは特定のカーネルバイナリ(または他の形式、画像形式はアドレスを変更せずに単にエンコードのみ)にvmlinux
関連付けられており、bzImage
特定のカーネルソース、設定、およびコンパイラに対して再現可能です。このファイルは以下によって生成されました。scripts/mksysmap
カーネルのビルドプロセスがほぼ終了すると、出力は次のようになります。nm
注文する。
このファイルは主にデバッグに使用されますが、不安定なカーネルインターフェイス(あるバージョンから次のバージョンへの変更などの不安定)を使用する一部のサードパーティモジュールをコンパイルするときにも読み込まれます。