8

現在 GDB を使用して接続している実行中のプロセスで、特定の値 (整数のマジック ナンバー (654321)) を見つけようとしています。コマンドを見つけましたfind [/sn] start_addr, +len, val1 [, val2, ...]が、開始アドレスと終了アドレスが必要ですが、プロセス メモリの開始位置と終了位置がわかりません。

これは非常に一般的な問題のようですが、1 年前にグーグルで検索したことを覚えています。今も同じことを繰り返していますが、成功していません。プロセス メモリの開始位置と終了位置を知るにはどうすればよいですか?

4

1 に答える 1

4

「すべての記憶」という考え方は、現代のプロセスでは複雑です。あなたが実際に持っているのは、さまざまなソースからの多くのマッピングです。これらを列挙することができます (読み取りアクセスなしでマップから読み取ろうとしないでください! また、共有ライブラリの .text セクションなどを検索しないように、何らかのインテリジェンスを適用したい場合があります)。実行時に読み取り/proc/$pid/maps、適切なコマンドを gdb に供給するスクリプトを作成します。正直なところ、バイナリ自体にルーチンを記述してこれを行い、gdb から呼び出すのが最も簡単だと思います。

于 2012-07-21T16:45:48.623 に答える