今天看到一个有意思的函数----ptrace,用来调试其他进程的,于是开始尝试
1、attach目标进程
nRet = ptrace(PTRACE_ATTACH, nPid, NULL, NULL);
if (nRet < 0)
{
perror("PTRACE_ATTACH");
return 0;
}
wait(NULL);
到这里没有出错。
2、获取目标进程的寄存器状态。
struct pt_regs reg;
nRet = ptrace(PTRACE_GETREGS, nPid, NULL ,®);
if (nRet < 0)
{
perror("PTRACE_GETREGS");
}
else
{
printf("EAX:0x%08x\n", reg.eax);
}
到这里也没出错。
3、使得目标进程继续运行
nRet = ptrace(PTRACE_CONT, nPid, NULL, NULL);
if (nRet < 0)
{
perror("PTRACE_CONT");
return 0;
}
到这里就出错了
程序输出如下:
[root@usr ptracetest]# ./d 4200
wait : 4200
EAX:0xfffffdfc
PTRACE_CONT:No such process
请问这是怎么回事呢,求解答
style 于 2013-09-02 08:12:36发表:
有人知道么?