1
在linux上檢查程序是否在調試器中的簡單方法是檢查if(ptrace(PTRACE_TRACEME, 0, 0, 0) == -1)
。在這之後我該如何分離? ptrace(PTRACE_DETACH, 0, 0, 0)
不起作用(返回-1
)。從ptrace上分離自己調用
在linux上檢查程序是否在調試器中的簡單方法是檢查if(ptrace(PTRACE_TRACEME, 0, 0, 0) == -1)
。在這之後我該如何分離? ptrace(PTRACE_DETACH, 0, 0, 0)
不起作用(返回-1
)。從ptrace上分離自己調用
只有「父」(調試器)才能從被跟蹤的子進程中分離;孩子不可能脫離自己。 man ptrace
:
PTRACE_TRACEME Indicate that this process is to be traced by its parent. … The PTRACE_TRACEMErequest is used only by the tracee; the remaining requests are used only by the tracer. …
我不認爲你可以。如果你正在調試,你不應該相信'ptrace'返回,這樣的測試可以很容易地繞開。 – fuz