私レディスデータベースを使用しており、アプリケーションで使用されているRAMの内容を参照しようとしています。
私が質問するよりも、なぜこれを行うのかを説明する方が意味があると思います。
Redisは、バイナリデータを格納する単純なKey-Valueストアです。私はここがコーディングのようなものを探索するのに良い場所だと思いました。単純なパターンを見つけるのと同じことをするのも楽しいでしょう。 RAMから検索するためのベビークエリ言語。
この章を読んでから、このような気がしました。SICPクエリ言語について。
どこから始めるべきアイデアはありますか?最初、私はシステムに「このアプリケーションを実行するアドレス空間を教えてください」と尋ねたかったのです。
答え1
cat /proc/[pid]/maps
procのマニュアルページによると。
あなたが望むようです。 pidが必要な場合は、psまたは他のツールからインポートしてください。
これは、使用中のアドレス空間を見つける問題を解決します。昨年、defconの研究者はLinuxでcreateremotethreadを実装しました。したがって、これを行うことができます...その後、この方法で任意のメモリを読み取ることができます。
~に帰属プシュ市pmap -x [pid]
これが読みやすくなることを指摘してください。
答え2
gdbを使用してプロセスのメモリにアクセスできます。
また、「/proc」ファイルシステムを調べる必要があります。これには各プロセスの疑似ファイルが含まれており、その一部には興味深い情報が含まれている場合があります。
答え3
デバッガを使用してください。それがまさにデバッガの目的です。
自分で始めたいなら全てが消えるptrace
。
プロセスのメモリマップ(メモリ内容テーブル)を表示し、/proc/$pid/maps
ここから完全なメモリ内容を読み取ることができます/proc/$pid/mem
。後者のファイルは正常に開くことができません。Linuxで/proc/$pid/memを読む方法は?