9

/ proc / $ PID / mapsを読み取ると、マップされたメモリ領域が取得されます。この地域の1つをダンプする方法はありますか?

$ cat /proc/18448/maps
...[snip]...
0059e000-005b1000 r-xp 00000000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
005b1000-005b2000 r--p 00012000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
005b2000-005b3000 rw-p 00013000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
...[snip]...

ありがとう

4

3 に答える 3

14

いや!ptrace()でお電話くださいPTRACE ATTACH。次に、を開き/proc/<pid>/mem、領域のオフセットを探し、で指定されているように領域の長さを読み取ります/proc</pid>/maps

これが私が書いたCでそれを行うプログラムです。これが私が書いたPython(そしてptraceバインディング)でそれを行うモジュールです。最後に、プロセスのすべての領域をファイルにダンプするプログラム

楽しみ!

于 2010-07-27T14:01:26.773 に答える
5

gdbをプロセスにアタッチしてから、次のように位置Lから始まる長さXワードのメモリ領域をダンプできますx/Xw L

プロセスの開始時にgdbをアタッチするのは簡単です:gdb ./executable次にrun。実行中のプロセスに接続する必要がある場合は、gdbを起動します。gdb attach pidここで、pidは気になるプロセスIDです。

于 2010-07-27T10:26:52.157 に答える
4

dd(1)の使用:

sudo dd if=/dev/mem bs=1 skip=$(( 16#0059e000 - 1 )) \
        count=$(( 16#005b1000 - 16#0059e000 + 1)) | hexdump -C
于 2010-07-27T13:36:39.663 に答える