これらのメモリ文字列とは何ですか? 何をするのですか?

これらのメモリ文字列とは何ですか? 何をするのですか?

最近、私はメモリ文字列を (単に可能だったため) を使用してダンプしました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 はテキスト セクション (カーネル オブジェクト コードが格納されている場所) の再配置情報です。

その他の興味深いセクションは次のとおりです。

  1. .modinfo - カーネルモジュール情報
  2. .rela.__ksymtab - カーネル シンボル テーブルの再配置テーブル
  3. .rela.data - カーネル データ セクションの再配置テーブル
  4. rodata.str1.1 - 文字列の読み取り専用データセクション

などなど。

/dev/mem で文字列を実行すると、システムの物理メモリ内で興味深い文字列が見つかるだけです。そのため、圧縮されていない vmlinuz Linux カーネル内にあるいくつかの文字列を見つけることができました。

関連情報