成功せずにサブプロセスのスタックを読み取ろうとします。私はうまくいくことを知っていますが、ptrace
インターフェースptrace
を使用すると一度に1つの単語しか読み取れませんが、スタックの大きな部分をスキャンしようとしています。
/proc/$pid/mem
また、提案されているように、ptraceを使用してファイルに最初に添付した後、ファイルから抽出されたスタック境界から読み取りを試みました。/proc/$pid/maps
ここ)しかし、プロセスの他の部分(ヒープなど)から読み取ろうとすると、同じコードが成功しても読み取りは失敗します(ルートとして実行しても)。
私は何が間違っていましたか?他のオプションがありますか?
ベストアンサー1
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;
}