4

gdb(または他のデバッガー)が別のプロセスのアドレス空間のメモリを変更する方法を理解したいだけですか?

実行中のプロセスがあり、それに接続します

添付pid

ここから、「接続されたプロセス」アドレス空間にあるメモリ(変数)を変更できます。これはどのように可能ですか。同じことをする際に他のプロセス(デバッガーではない)を停止しているのは何ですか。OSはdoors、デバッガーが別のプロセスのアドレス空間をピーク/変更するために使用できる特別な機能を提供しますか?

または私はこれを間違えていますか?アタッチ後、プロセスはデバッガーのコンテキスト内で実行されますか?もしそうなら、この文脈での変化はどのように起こりますか?これが発生した場合、これは書き込み時のコピーであると想定できますか?その場合、デバッガーは変更されたデータとは異なるメモリを持ちます。しかし、gdbからメモリを変更してプロセスから切り離すと、プロセスは変更されたデータを引き続き表示します。これは、gdbがこの実行中のプロセスのアドレス仕様にアクセスできることを意味しますか?

これを理解するためのポインタをいただければ幸いです。gdbのコードを見ることができますが、コードは巨大で、どこから始めればよいのかわかりませんでした。

ありがとう。

4

1 に答える 1

5

Linuxでは、APIはptrace()です。マニュアルページに記載されている特定の特権が必要です。

使用方法のチュートリアルについては、「ptraceで遊ぶ」を参照してください。

于 2013-02-27T14:34:11.983 に答える