没有这样的过程-ptrace

问题陈述:程序C由循环组成。此程序的执行必须由另一个进程控制,该进程将定期显示受控进程的进度。kill(pid,SIGSTOP)之后,函数ptrace(ptrace\u peek text,pid,…)不再找到C进程。根据我所读到的,ptrace(ptrace_peek text,pid,)应该在pid标识的进程停止时工作

我不知道我到底错过了什么,所以任何帮助都将不胜感激。以下是我迄今为止所做的工作:

有两个过程,pC

第一个进程(p)通过fork()创建第二个进程(C)

C的代码如下所示:

inti=0;
int main(){
ptrace(ptrace_TRACEME,0,NULL,NULL);
printf(“内存地址=%p”,(void*)和i);
而(1){i++;}
}

p的代码如下:

{…}
开关(pid=fork()){
案例0:/*子案例*/
如果(execl(“C”,“char*)NULL)=-1){
perror(“execl”);
}
打破
案例-1:/*错误*/
佩罗尔(“福克”);
退出(退出失败);
默认值:/*父项*/
睡眠(1);
压井(pid、SIGSTOP);
等待(状态);
如果(WSTOPSIG(状态)=SIGSTOP){
printf(“%s”,“子项被中断。插入内存地址\n”);
scanf(“%p”和地址);
printf(“地址=%p”,地址);
数据=ptrace(ptrace_peek文本,pid,地址,NULL);
如果(数据==-1){
如果(错误号){
printf(“%s\n”,“文本出现错误”\n”);
printf(“%s\n”,strerror(errno));
}
if(errno==ESRCH){
printf(“%s\n”,“ESRCH错误\n”);
}
如果(errno==EIO){
printf(“%s\n”,“EIO错误\n”);
}
}
printf(“***检索到的数据为:%ld\n”,数据);
数据=ptrace(ptrace_CONT,pid,0,0);
}    
如果(妻子退出(状态)){
printf(“[Parent]-子项的退出状态为:%d\n”,WEXITSTATUS(status));
打破
}
打破
} 
{...}

输出为:

  1. 来自C:内存地址=0x60104c
  2. P:孩子被打断了。插入内存地址(下一步我插入C打印的内容)

地址=0x60104c

错误是:

查看文本时出错

没有这样的过程

ESRCH误差

***检索到的数据为:-1

确保address变量的类型正确。我试过使用void*address,它对我也有效。我通过对地址变量使用int得到了您的错误

发表评论