ptrace
のインターフェースを使用すると、一度に1つの単語しか読むことができず、スタックの大部分をスキャンしようとしています。
それでは、ループを使用してください。正直なところ、それがどのように問題を構成しているかはわかりませんがptrace
、リモートアクセスプロセスには常に使用しています。
私はこのようなものを使用します:
static int memcpy_from_target(pid_t pid, char *dest, long src, size_t n)
{
static int const align = sizeof(long) - 1;
while (n)
{
size_t todo = MIN(n, sizeof(long) - (src & align));
long data = ptrace(PTRACE_PEEKTEXT, pid, src - (src & align), 0);
if (errno)
{
perror("ptrace_peektext (memcpy_from_target)");
return -1;
}
memcpy(dest, (char *)&data + (src & align), todo);
dest += todo; src += todo; n -= todo;
}
return 0;
}
waitpid
間ptrace(PTRACE_ATTACH,…)
とread
(そうでない場合があります可能な競合状態)?どのエラーがread
返されますか?子はそのメモリマッピングに特有のことをしていますsleep
か。コードを次のような単純な子で試してみることができますか?