VirtualProtectを使用する必要があります。質問は、関数に渡される領域のアドレスについてです。(MSDNで)「開始ページを説明するアドレス」と表示されていますが、ページの先頭のアドレスである必要がありますか、それともそのページの任意のアドレスである可能性がありますか?つまり、最初にVirtualQueryを使用してページの開始アドレスを決定する必要がありますか?
質問する
1162 次
2 に答える
3
ページのベースアドレスを渡す必要はありません。VirtualProtect
ページ内のすべてのアドレスを受け入れます。パラメータの説明はdwSize
それを明確にします:
影響を受けるページの領域には、lpAddressパラメーターから(lpAddress + dwSize)までの範囲の1つ以上のバイトを含むすべてのページが含まれます。これは、ページ境界にまたがる2バイトの範囲により、両方のページの保護属性が変更されることを意味します。
ページ境界にまたがる2バイトの範囲を持つことができる場合lpAddress
、ページの終わりの1バイト前になることが可能でなければなりません。ページの長さは1バイトだけにすることはできないため、ページの先頭にはありません。
于 2012-05-31T19:02:28.867 に答える
1
どちらの場合も、必要はありません。VirtualQuery
ページは常にの倍数でありPAGE_SIZE
、通常は4KiBです。したがって、番号を最も近いに切り捨てる必要がありますPAGE_SIZE
。
しかし、私はあなたが切り捨てる必要があるとは思わない。どんなアドレスでもうまくいくと思います。ただし、再確認する価値があるかもしれません。
于 2012-05-31T18:11:20.073 に答える