1. ホーム
  2. c

[解決済み] GDB: クラッシュしたプロセスのすべてのマップされたメモリ領域をリストアップする

2022-02-07 04:49:52

質問

x86 Linux マシン (重要ならカーネル 2.6.35-22) 上の死んだプロセスからフルヒープのコアダンプを取得し、GDB でデバッグしようとしています。

このプロセスによって割り当てられたすべてのメモリ アドレス領域のリストを表示する GDB コマンドはありますか。

なぜこのような質問をするかというと、私は プロセスヒープ全体 を使用するためには、そのバイナリ文字列に対して find コマンドの場合、開始と終了のアドレスが必要なんです。単純に0x00から0xff...まで検索しても、以下の理由でうまくいきません。 find アクセスできないアドレスに遭遇するとすぐに停止してしまいます。

(gdb) find /w 0x10000000, 0xff000000, 0x12345678

警告を表示します。0x105ef883 にあるターゲットメモリにアクセスできないため、停止しています。 を検索してください。

そこで、メモリ内のすべての読み取り可能なアドレス領域のリストを取得し、一度に1つずつ検索できるようにする必要があります。

(を行う必要があるのは その を指すメモリ内のすべての構造体を見つける必要があるからです。 というアドレスになります)。

なし show mem , show proc , info mem , info proc は、私が必要とすることを行うように見える。

どのように解決するのですか?

GDB 7.2にて。

(gdb) help info proc
Show /proc process information about any running process.
Specify any process id, or use the program being debugged by default.
Specify any of the following keywords for detailed info:
  mappings -- list of mapped memory regions.
  stat     -- list a bunch of random process info.
  status   -- list a different bunch of random process info.
  all      -- list all available /proc info.

あなたが欲しいのは info proc mappings がない場合は動作しません。 /proc (pos-mortemのデバッグ時など)。

試す maintenance info sections の代わりに