最近、私はメモリ文字列を (単に可能だったため) を使用してダンプしました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
@jos が上で言ったことに +1 です (「ググってみてください」)。この特定のケースでは、「.rela_」と「_gpl」の部分を削除する必要があります。これらがカーネル シンボルであることがわかります。「rela」は「relocation」の頭字語で、ELF ファイル形式に関係しています。これらはすべて興味深いトピックなので、さらに詳しく調べることをお勧めします。
答え2
これらは Linux カーネルのセクション名に非常によく似ています。.rela で始まるセクションには、名前付きセクションの再配置情報が含まれます。たとえば、.rela.text はテキスト セクション (カーネル オブジェクト コードが格納されている場所) の再配置情報です。
その他の興味深いセクションは次のとおりです。
- .modinfo - カーネルモジュール情報
- .rela.__ksymtab - カーネル シンボル テーブルの再配置テーブル
- .rela.data - カーネル データ セクションの再配置テーブル
- rodata.str1.1 - 文字列の読み取り専用データセクション
などなど。
/dev/mem で文字列を実行すると、システムの物理メモリ内で興味深い文字列が見つかるだけです。そのため、圧縮されていない vmlinuz Linux カーネル内にあるいくつかの文字列を見つけることができました。