0

私はこれに似たリンクリストを持っています:

class MemoryCell
{
protected:
    unsigned char* _address; // the address offset (in another process)
    unsigned int _size;  // the size of this memory block
    unsigned char* _buffer; // the data

    MemoryCell* _next; // points to next memory cell to form linked list
};

それから私はMemoryMapper頭を抱えるクラスを持っています。すべてのメモリーセルを入れたいです。

// void MemoryMapper::MapAllCells(unsigned int procId)//
unsigned int offset = 0x0;
while (true)
    {
        long memoryData = ptrace(PTRACE_PEEKDATA, procId, offset);
        if (memoryData == -1) break; // need to check for errno(3) too
       // add new MemoryCell w/ data to head of linked list
       // how to get next offset based on what was returned?

アドレス0ですぐに中断します。そのプロセスでは0x0から開始する可能性があると思いましたが、実際のオフセットが必要だと思います。しかし、(前のサイズに基づいて)次のオフセットも取得するにはどうすればよいですか?

はっきりしているといいのですが、必要に応じて明確にできますありがとうございます

4

1 に答える 1

0

この情報はptrace();から取得できません。/proc/PID/mapsただし、子プロセスから取得できます。アドレス0は通常、ポインタ参照をキャッチするためにマップされてNULLおらず、意味をなさない場合があることに注意してくださいPTRACE_PEEKDATA(最近では、個別のIとDは一般的に使用されておらず、アドレス0がない場合、通常はデータではなくテキストです。カーネルかどうかわざわざ区別する、頭のてっぺんからわからない)。

于 2012-04-14T22:21:18.583 に答える