私はレディスデータベースと、アプリケーションが使用している RAM の内容を調べたいと考えています。
私がなぜこれをやりたいのかを説明する方が、私が尋ねる質問よりも意味をなすだろうと思います。
Redis は、バイナリ データを保存するシンプルなキー バリュー ストアです。エンコードなどのことを探求するには Redis が適していると思います。また、RAM をざっと調べてバイナリ データ セットを探したり、シンプルなパターンを探したりすることも興味深いと思います。RAM 内を検索する小さなクエリ言語を書くというアイデアも探求できるかもしれません。
このアイデアは、SICPクエリ言語について。
どこから始めればよいか、何かお考えはありますか? 最初に、システムに対して「このアプリケーションが実行されているアドレス空間を教えてください」と尋ねたいと思います。
答え1
cat /proc/[pid]/maps
proc のマニュアルページによると。
まさにあなたが求めているもののようです。PID が必要な場合は、ps またはその他のツールから取得してください。
これは、使用中のアドレス空間を見つけるためのものです。昨年の defcon の参加者の 1 人が、Linux に createremotethread を実装しました。つまり、これを実行すれば、任意のメモリをそのように読み取ることができます。
クレジットプシpmap -x [pid]
読みやすくなった と指摘していただきありがとうございます。
答え2
gdb を使用してプロセスのメモリにアクセスできます。
また、「/proc」ファイルシステムも確認する必要があります。そこには各プロセスの疑似ファイルが含まれており、その中には興味深い情報が含まれている場合があります。
答え3
デバッガーを使用してください。それがデバッガーの目的です。
自分で巻く場合は、すべてptrace
。
プロセスのメモリマップ(メモリの目次)は で確認でき/proc/$pid/maps
、メモリの内容全体を から読み取ることが/proc/$pid/mem
できます。後者のファイルを普通に開くことはできません。Linux で /proc/$pid/mem から読み取るにはどうすればいいですか?