3

私の目標は、プロセス ハンドルを受け取り、そのプロセスのメモリを表すバイト配列を返すメソッドを作成することです。ここに私が持っているものがあります:

    [DllImport("Kernel32.dll")]
    public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 nSize, ref UInt32 lpNumberOfBytesRead);

    public static byte[] MemRead(IntPtr handle, IntPtr address, UInt32 size, ref UInt32 bytes)
    {
        byte[] buffer = new byte[size];
        ReadProcessMemory(handle, address, buffer, size, ref bytes);
        return buffer;
    }

ラッパー メソッドに引数として何を渡せばよいかわかりません。ahandleと thebytesは出力変数ですが、addressandはsizeどうでしょうか。このデータはどこから入手できますか?

4

1 に答える 1

0

MemRead を呼び出す前に、VirtualQuery を使用して、アドレスが実際に割り当てられているかどうかを調べます。アドレスとして 0、ページ サイズとして 64K から開始し、システムのメモリの最大サイズに達するまで、繰り返しごとにポインタを 64K だけインクリメントします。

于 2011-05-20T20:33:35.643 に答える