他のプロセスのスタックを読みますか?

他のプロセスのスタックを読みますか?

成功せずにサブプロセスのスタックを読み取ろうとします。私はうまくいくことを知っていますが、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;
}

おすすめ記事