首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪PTRACE_PEEKTEXT误差

跟踪PTRACE_PEEKTEXT误差
EN

Unix & Linux用户
提问于 2021-05-17 12:21:22
回答 1查看 301关注 0票数 -1

当我在C程序中使用ptracePTRACE_PEEKTEXT时,为什么会出现这个错误??

我在程序中使用PTRACE_PEEKTEXT的部分是:

代码语言:javascript
复制
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));
}

(它是这个程序的一部分)

为什么会发生此错误??

代码语言:javascript
复制
PTRACE_PEEKTEXT error: Input/output error[1]
EN

回答 1

Unix & Linux用户

发布于 2021-05-17 12:55:00

根据手册页,EIO的意思是:

无效,或试图从跟踪程序或tracee内存中的无效区域读取或写入无效区域,或在重新启动请求期间指定无效信号。

因此,传递给child_addrptrace(PTRACE_PEEKDATA, ...)变量可能是不正确的。一个好的开始是检查ptrace(PTRACE_PEEKUSER, ...)的结果是否有错误。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/650054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档