無効なアドレスを読み取ることはできません(明らかに)。
一部のOSでは、プロセスがGDBで停止しているときに、有効なアドレスについてOSにクエリを実行できます。たとえば、Linuxでは、cat /proc/<pid>/maps
有効なアドレス(およびそれらが有効なアクセスモード)に関する情報が表示されます。他のOSも同様のメカニズムを持っている可能性があります。
質問post-mortem
にタグを付けたため、上記のメカニズムを使用することはできません。しかし、あなたはcore
ファイルを持っている必要があります。Linux(およびその他のELF
システム)では、readelf -l core
メモリのどの領域がコアに書き込まれたかがわかります。これにより、通常、クラッシュ時に有効だったメモリがわかります。ただし、通常、読み取り専用マッピングはに書き込まれないcore
ため、出力にそのようなマッピングが表示されない場合がありreadelf
ます。
最近のすべてのOSはページングを使用しており、ページは少なくとも1K
(より一般的ですが)ページであるため、有効である可能性4K
のある最も近いメモリは、など(バイト)であることがわかります。$t5
0x842da800
n >= 84
最後に、GDBに64語を調べるように依頼し、GDBが最初の単語を調べることができない場合、GDBは停止します。
ただし、GDB-7.xを使用している場合は、Pythonで一度に1つの単語を検査するようにGDBに要求でき、GDBは、その特定の単語を検査できない場合、Python例外をスローします。しかし、Pythonの例外をキャッチできるので、Pythonで「次のN語を調べ、読めない単語を無視する」を実装するスクリプトを作成するのは簡単です(これは、「これをどのように行うことができるか」という質問に答えると思います)。