Existuje systémové volání s názvem ptrace. Vyžaduje 4 parametry:operaci, PID cílového procesu, adresu v paměti cílového procesu a datový ukazatel. Způsob použití posledních 2 parametrů závisí na operaci.
Například můžete připojit/odpojit svůj debugger k procesu:
ptrace(PTRACE_ATTACH, pid, 0, 0);
...
ptrace(PTRACE_DETACH, pid, 0, 0);
Provedení v jednom kroku:
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);
Můžete také číst/zapisovat paměť cílového procesu pomocí PTRACE_PEEKDATA a PTRACE_POKEDATA. Pokud chcete vidět skutečný příklad, podívejte se na gdb.
Podrobné informace o řídkých souborech na Linuxu
Poskytuje SELinux dostatek dodatečného zabezpečení, aby stálo za to se ho učit/nastavovat?