ptrace PTRACE_PEEKTEXT 오류

ptrace PTRACE_PEEKTEXT 오류

C 프로그램에서 ptrace PTRACE_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]

답변1

매뉴얼 페이지에 따르면 EIO이는 다음을 의미합니다.

유효하지 않음, 추적기 또는 추적 대상 메모리의 유효하지 않은 영역을 읽거나 쓰려고 시도했거나, 단어 정렬 위반이 있었거나, 다시 시작 요청 중에 유효하지 않은 신호가 지정되었습니다.

따라서 child_addr전달된 변수가 ptrace(PTRACE_PEEKDATA, ...)정확하지 않을 수 있습니다. 좋은 시작은 ptrace(PTRACE_PEEKUSER, ...)결과에 오류가 있는지 확인하는 것입니다.

관련 정보