4

GDB で最適化された Linux 実行可能ファイルをデバッグしています。プログラムがセグメンテーション違反でクラッシュします。ただし、障害のある命令は実際には無効なポインターにアクセスしていないようです。基本的に、mov 0xf00(%ebx), eax0xf00(%ebx) が有効なメモリである op です。少なくとも、xアドレスを指定すると表示されます。

現在キャッチされている例外に関するすべての詳細を表示する GDB コマンドは何ですか?これには、障害のあるオペコードがアクセスしようとした正確なメモリ アドレスが含まれます。この情報は例外トラップ フレームにあるはずですが、GDB 経由で取得する方法がわかりません。

これは、Ubuntu での x86 用です。

4

1 に答える 1

3

ただし、障害のある命令は実際には無効なポインターにアクセスしていないようです。これは基本的に mov 0xf00(%ebx), eax op であり、0xf00(%ebx) は有効なメモリです。少なくとも、そのアドレスを x すると表示されます。

アドレスが実際には無効であると推測します ( でmmap編集PROT_NONE)。

GDB がそれを調べることができる理由は、Linux ではptrace(GDB が下位メモリにアクセスするために使用する) そのようなアドレスから問題なく読み取ることができますが、アプリケーション自体はできません。

現在キャッチされている例外に関するすべての詳細を表示する GDB コマンドは何ですか?

print $_siginfoGDBがシグナルで停止したときに試してください。ドキュメンテーションはこちら

于 2012-06-22T01:18:24.490 に答える