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