gdb(または他のデバッガー)が別のプロセスのアドレス空間のメモリを変更する方法を理解したいだけですか?
実行中のプロセスがあり、それに接続します
添付
pid
ここから、「接続されたプロセス」アドレス空間にあるメモリ(変数)を変更できます。これはどのように可能ですか。同じことをする際に他のプロセス(デバッガーではない)を停止しているのは何ですか。OSはdoors
、デバッガーが別のプロセスのアドレス空間をピーク/変更するために使用できる特別な機能を提供しますか?
または私はこれを間違えていますか?アタッチ後、プロセスはデバッガーのコンテキスト内で実行されますか?もしそうなら、この文脈での変化はどのように起こりますか?これが発生した場合、これは書き込み時のコピーであると想定できますか?その場合、デバッガーは変更されたデータとは異なるメモリを持ちます。しかし、gdbからメモリを変更してプロセスから切り離すと、プロセスは変更されたデータを引き続き表示します。これは、gdbがこの実行中のプロセスのアドレス仕様にアクセスできることを意味しますか?
これを理解するためのポインタをいただければ幸いです。gdbのコードを見ることができますが、コードは巨大で、どこから始めればよいのかわかりませんでした。
ありがとう。