1

他のプロセスのメモリにアクセスする方法を学ぼうとしています。使用してReadProcessMemoryいますが、アクセスできないメモリから読み取っているため、失敗します。読み込もうとしているメモリが読み取り可能かどうかを最初に使用する必要があると思いますVirtualQueryExが、の結果を解析する方法がわかりませんVirtualQueryEx

VirtualQueryExここで説明されている構造を返しますhttp://msdn.microsoft.com/en-us/library/windows/desktop/aa366775%28v=vs.85%29.aspx

MEMORY_BASIC_INFORMATION構造内の値がページが読み取り可能かどうかを示す簡単な方法はありますReadProcessMemoryか?

この構造には、私が理解していることから、メモリにアクセスできるかどうかを定義するいくつかのパラメータがあります。

DWORD  AllocationProtect;
DWORD  State;
DWORD  Protect;
DWORD  Type;

パラメータのどの組み合わせが実際にメモリの読み取りを許可するか(たとえば、AllocationProtectまたはから保護フラグを読み取る必要がある場合ProtectStateコミット以外はメモリが読み取り不能であることを意味するなど)、巨大な場合(これはそれであり、それまたはこれはそれです....)クリーンな解決策のようには見えません。

もっと良い方法があるはずですが、私はそれを見つけることができないようです...

4

1 に答える 1

2

実際、手がかりはリンクしたドキュメントにあります。

AllocationProtect

リージョンが最初に割り当てられたときのメモリ保護オプション。このメンバーは、メモリ保護定数の1つにするか、呼び出し元にアクセス権がない場合は0にすることができます。

VirtualProtectまたはVirtualProtectEx、保護を変更するためにその間に使用された可能性があります(最初の保護は割り当てられた範囲全体に対するものでしたが、ページごと)。Protectそのため、構造体のメンバーを、読み取りが許可されていることを示すMSDNドキュメントのメモリ保護定数と照合する必要があります。1ビットをチェックするだけでは不十分のようです。

于 2012-05-12T00:42:41.173 に答える