当我在C程序中使用ptracePTRACE_PEEKTEXT时,为什么会出现这个错误??
我在程序中使用PTRACE_PEEKTEXT的部分是:
static void read_file(pid_t child, char *file)
{
char *child_addr;
int i;
child_addr = (char *) ptrace(PTRACE_PEEKUSER, child, sizeof(long)*RDI, 0);
do {
long val;
char *p;
val = ptrace(PTRACE_PEEKDATA, child, child_addr, NULL);
if (val == -1) {
fprintf(stderr, "PTRACE_PEEKTEXT error: %s", strerror(errno));
exit(1);
}
child_addr += sizeof (long);
p = (char *) &val;
for (i = 0; i < sizeof (long); ++i, ++file) {
*file = *p++;
if (*file == '\0') break;
}
} while (i == sizeof (long));
}(它是这个程序的一部分)
为什么会发生此错误??
PTRACE_PEEKTEXT error: Input/output error[1]发布于 2021-05-17 12:55:00
根据手册页,EIO的意思是:
无效,或试图从跟踪程序或tracee内存中的无效区域读取或写入无效区域,或在重新启动请求期间指定无效信号。
因此,传递给child_addr的ptrace(PTRACE_PEEKDATA, ...)变量可能是不正确的。一个好的开始是检查ptrace(PTRACE_PEEKUSER, ...)的结果是否有错误。
https://unix.stackexchange.com/questions/650054
复制相似问题