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, ...)結果にエラーがあるかどうかを確認することです。

おすすめ記事