Linuxでは、デバッガはどのように機能しますか?

Linuxでは、デバッガはどのように機能しますか?

Linuxでは、デバッガはどのように機能しますか?すでに実行中の実行可能ファイルまたはプロセスにどのように「接続」しますか?コンパイラがコードを機械語に変換することは知っていますが、デバッガはどのようにコードがリンクされているのかを「知ること」できますか?

ベストアンサー1

というシステムコールがあります。。これには、ジョブ、ターゲットプロセスのPID、ターゲットプロセスメモリのアドレス、データポインタなど4つのパラメータが必要です。最後の2つのパラメータの使用方法は、操作によって異なります。

たとえば、デバッガをプロセスに接続/分離できます。

ptrace(PTRACE_ATTACH, pid, 0, 0);
...
ptrace(PTRACE_DETACH, pid, 0, 0);

シングルステップ実行:

ptrace(PTRACE_ATTACH, pid, 0, 0);
int status;
waitpid(pid, &status, WSTOPPED);
while (...) {
    ptrace(PTRACE_SINGLESTEP, pid, 0, 0);
    // give the user a chance to do something
}
ptrace(PTRACE_DETACH, pid, 0, 0);

PTRACE_PEEKDATA および PTRACE_POKEDATA を使用して、ターゲット・プロセスのメモリを読み書きすることもできます。実際のケースを見たい場合は確認してくださいデータベース

おすすめ記事