RAMの内容を調べる


12

私はredisデータベースを使用していますが、アプリケーションが使用しているRAMの内容を調べたいです。

私がこれをしたい理由の説明は、私が尋ねる質問よりも理にかなっていると感じています。

Redisは、バイナリデータを格納する単純なキー値ストアです。エンコードのようなものを調べるには良い場所だと思うし、RAMをざっと見てデータのバイナリセットを探したり、単純なパターンを探したりすることも面白いと思う。多分、RAMで検索するベビークエリ言語を書くというアイデアを探ってください。

クエリ言語に関するSICPの章を読んだ後、私はこのアイデアを得ました。

どこから始めればいいのでしょうか?最初に、「このアプリケーションが実行されているアドレス空間を教えてください」とシステムに尋ねたいと思います。

回答:


7

gdbを使用して、プロセスのメモリにアクセスできます。

また、「/ proc」ファイルシステムを確認する必要があります-すべてのプロセスの疑似ファイルが含まれています。それらのいくつかは興味深い情報を含んでいるかもしれません


7

cat /proc/[pid]/maps procのマンページによると。

あなたが望むもののように見えます。pidが必要な場合は、psまたはその他のツールから取得します。

それは、使用中のアドレス空間を見つけることに対処します。defconのフェローの1人は、Linuxにcreateremotethreadを実装しました。だからあなたはそれを行うことができます...そしてそのように任意のメモリを読み取ります。

功績psusiことを指摘してpmap -x [pid]読みやすいです。


3
pmapこの情報は、人間が読みやすいようにフォーマットされることに注意してください。
-psusi

6

デバッガーを使用します。それが目的です。

あなたがあなた自身をロールバックしたい場合、それはすべて通過します ptraceます。

でプロセスのメモリマップ(メモリの目次)を確認し/proc/$pid/maps、メモリの内容全体をから読み取ることができます/proc/$pid/mem。通常、後者のファイルを開くことはできません。Linuxで/ proc / $ pid / memから読み取るにはを参照してください


1
あなたは私の質問のいくつかで信じられないほど役に立ちました。Linux OSに一般的に関連する書籍、または特に興味深いWeb記事を読むことを提案しますか?
MageProspero
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.