2012-07-21 8 views
6

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

これは1年前にグーグルで覚えていますが、今はそれが成功していないので繰り返しました。 プロセスメモリの開始位置と終了位置を知る方法を教えてください。

答えて

4

「すべてのメモリ」という考えは、現代のプロセスでは複雑です。あなたが実際に持っているものは、さまざまな情報源からの多くのマッピングです。これらを列挙することができます(読み込みアクセスなしでマップから読み込もうとしないように注意してください!)また、共有ライブラリなどの.textセクションを検索しないように、情報をいくつか適用したいと思うかもしれません。実行時に/proc/$pid/mapsを読んでから、gdbに適切なコマンドを入力するようにスクリプトを書いてください。正直なところ、バイナリ自体にルーチンを記述してgdbから呼び出すのが最も簡単かもしれないと思います。

+0

'/ proc/$ pid/maps'の形式を記述したマンページはありますか? –

+0

@Jonas:http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o

+0

@ mark4oありがとう。 'maps'、' proc_maps'、 'procfs'を成功せず試しました。 –