GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie funktioniert ein Debugger unter Linux?

Es gibt einen Systemaufruf namens ptrace. Es benötigt 4 Parameter:die Operation, die PID des Zielprozesses, eine Adresse im Speicher des Zielprozesses und einen Datenzeiger. Die Art und Weise, wie die letzten 2 Parameter verwendet werden, hängt von der Operation ab.

Beispielsweise können Sie Ihren Debugger an einen Prozess anhängen/abtrennen:

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

Einzelschrittausführung:

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);

Sie können den Speicher des Zielprozesses auch mit PTRACE_PEEKDATA und PTRACE_POKEDATA lesen/schreiben. Wenn Sie ein echtes Beispiel sehen möchten, schauen Sie sich gdb an.


Linux
  1. Wie funktioniert copy_from_user aus dem Linux-Kernel intern?

  2. Wie funktioniert sig_atomic_t eigentlich?

  3. Funktioniert ZFS unter Linux?

  4. Wie funktioniert die Stapelzuweisung unter Linux?

  5. Wie funktioniert der ps-Befehl?

Linux – Wie funktioniert die Anzeige von Linux?

Was ist Source Command in Linux und wie funktioniert es?

Wie funktioniert Swap-Speicher in Linux?

Wie funktioniert Rm? Was macht Rm?

Wie funktioniert eine Linux-GUI auf der untersten Ebene?

Wie funktioniert die Anzeige von Linux?