最近、文字列を使ってメモリをダンプしましたsudo cat /dev/mem | strings
。このダンプを見た後、非常に興味深い事実が見つかりました。
.symtab
.strtab
.shstrtab
.note.gnu.build-id
.rela.text
.rela.init.text
.rela.text.unlikely
.rela.exit.text
.rela__ksymtab
.rela__ksymtab_gpl
.rela__kcrctab
.rela__kcrctab_gpl
.rela.rodata
.rodata.str1.8
.rela__mcount_loc
.rodata.str1.1
.rela__bug_table
.rela.smp_locks
.modinfo
__ksymtab_strings
.rela__tracepoints_ptrs
__tracepoints_strings
__versions
.rela.data
.data.unlikely
.rela__verbose
.rela__jump_table
.rela_ftrace_events
.rela.ref.data
.rela__tracepoints
.rela.gnu.linkonce.t6
この行はすべて何らかの方法で関連しているようです。メモリ内のすべて(非常に)互いに近い、すべて同じ.<name>
接頭辞を持ち、すべてが互いに参照するようです。
これらの文字列が表示される原因は何ですか、その理由は何ですか?
答え1
+1 @jos上記の言葉(「Google it」)。この特別な場合は、「.rela_」と「_gpl」の部分を削除する必要があります。これはカーネル記号であることがわかります。 "rela"は"relocation"の略で、ELFファイル形式に関連しています。これらはすべて興味深いトピックなので、さらに詳しく調べてください。
答え2
これはLinuxカーネルのセクション名と非常によく似ています。 .rela プレフィックスが付いた再配置情報には、指定されたセクションの再配置情報が含まれます。たとえば、.rela.text は、カーネルオブジェクトコードが格納されるテキストセクションの再配置情報です。
その他の関心部分は次のとおりです。
- .modinfo – カーネルモジュールについて
- .rela.__ksymtab - カーネルシンボルテーブルの再配置テーブル
- .rela.data - カーネルデータ部分再配置テーブル
- rodata.str1.1 - 読み取り専用文字列データ部分
など。
/dev/memで文字列を実行すると、システム上の物理メモリにのみ興味深い文字列を見つけることができるため、圧縮されていないvmlinuz Linuxカーネルでいくつかの文字列を見つけることができます。