問題タブ [virtualquery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
6756 参照

c - メモリ保護を把握するために /proc/self/maps を解析するよりも良い方法はありますか?

Linux (または Solaris) では/proc/self/maps、メモリ内の 1 つ以上のアドレスに格納されているものを読み取り、書き込み、または実行できるかどうかを判断するために、手動で繰り返し解析するよりも良い方法はありますか?

たとえば、Windows ではVirtualQuery.

Linux では、mprotectこれらの値を変更できますが、読み戻すことはできません。

さらに、これらのアクセス許可がいつ変更されたかを知る方法はありますか (たとえば、誰かがmmap私の背後にあるファイルを使用したとき)、非常に侵襲的なことを行いptrace、プロセス内のすべてのスレッドで使用しsyscall、メモリに影響を与える可能性のある.地図?

アップデート:

残念ながら、私はこれを JIT 内で使用しています。この JIT は、実行中のコードに関する情報がほとんどなく、定数の近似値を取得しています。はい、Linux で使用される vsyscall ページのように、変更可能なデータの定数マップを保持できることを認識しています。最初の解析に含まれていないものは変更可能で危険であるという仮定に安全に戻ることができますが、そのオプションに完全に満足しているわけではありません

今私がしていることは/proc/self/maps、特定のアドレスの保護をバイナリ検索できる構造を読んで構築することです。私の構造にないページについて何かを知る必要があるときはいつでも /proc/self/maps 、それがその間に追加されていると仮定して読み直します。

テキストを解析してこの情報を取得し、それがいつ変更されるかを知らないのは、非常に厄介なようです。(/dev/inotifyのほとんど何も動作しません/proc)

0 投票する
2 に答える
640 参照

virtualquery - VirtualQuery は不正な結果を返します。バグですか?

私のコード:

結果:

ノート:

(1) AllocationBase が NULL で、BaseAddress が NULL でない
(2) AllocationProtect が 0 (保護値ではない)

VirtualQueryのバグですか?

0 投票する
1 に答える
1639 参照

c++ - Win API VirtualQueryEx 関数、ERROR_BAD_LENGTH

こんにちは、VirtualQueryEx 関数を呼び出してメモリ保護に関する情報を取得しようとしましたが、コードでエラー 0x18 (ERROR_BAD_LENGTH) が表示され、コードの問題点がわかりません。

コードスニペット:

PMEMORY_BASIC_INFORMATION アルテ;

VirtualQueryEx(processhandle,(LPVOID) (アドレス),alte,sizeof(PMEMORY_BASIC_INFORMATION));

ご協力いただきありがとうございます

0 投票する
2 に答える
1162 参照

c++ - VirtualProtectにはページの先頭のアドレスが必要ですか?

VirtualProtectを使用する必要があります。質問は、関数に渡される領域のアドレスについてです。(MSDNで)「開始ページを説明するアドレス」と表示されていますが、ページの先頭のアドレスである必要がありますか、それともそのページの任意のアドレスである可能性がありますか?つまり、最初にVirtualQueryを使用してページの開始アドレスを決定する必要がありますか?

0 投票する
3 に答える
3700 参照

c++ - プロセス メモリをスキャンするとクラッシュする

私は自分の DLL をプロセスに注入し、自分と同じ値のアドレスをメモリでスキャンしようとしましたが、最初のアドレスを取得した後にクラッシュが発生しました。10 個のアドレスである必要があります。

私の保護チェックは間違っていると思いますが、よくわかりません。

0 投票する
1 に答える
770 参照

windows - _MEMORY_BASIC_INFORMATION 構造の BaseAddress と AllocationBase および AllocationProtect と Protect の違いは何ですか?

_MEMORY_BASIC_INFORMATIONアドレス空間を記述するフィールドが含まれています。BaseAddressと Aの違いを知りたいですllocationBaseBaseAddressは地域のベースアドレスで、? とは何AllocationBaseですか?

AllocationProtectまた、との違いも知りたいですProtect。少しはわかりますAllocationProtect が、 はリージョンを予約するときの保護属性、 はパラメータProtectで呼び出すときの保護属性だと思います。もしそうなら、リージョンを予約するときのフィールドは何ですか?VirtualAllocMEM_COMMITProtect

0 投票する
1 に答える
109 参照

windows - 異なる地域は同じ割り当てアドレスを持っています

Windows 7 のプロセスのアドレス空間を調べます。VirtualQueryEx関数を使用します。これは私の例handleOfProcess_の一部です。プロセスのハンドルは次のとおりです。

デバッグを行うと、AllocationBase0x000200000x00020000あり、Allocationbase0x000210000x00000000あることがわかります。これはallocationBase別の領域です。

どうすれば起こりますか?

ありがとうございます。

0 投票する
0 に答える
177 参照

android - VirtualQueryEx が 000000000 配列全体を返す

プロセスのメモリ内で値 (さらには値のパターン) を検索するのに苦労しています。このプロセスは「VBoxHeadless」プロセスです (通常の VM プロセスと同様ですが、必要に応じてリモートで実行できる GUI はありません)。Android エミュレータの Andy によって作成されました。

プロセスからハンドルを取得できますが、VirtualQueryEx を使用すると取得できるのは適切な長さの配列だけですが、値は '00000000000' のみです。

この情報にアクセスするためにさまざまな方法を試しましたが、結果は同じです。

何か案が?

0 投票する
2 に答える
1246 参照

c++ - VirtualQuery によって返された空き領域で VirtualAlloc を実行できない

Windows アプリケーション内にロードされる DLL のメモリ範囲内で一定量のメモリを割り当てようとしています。

私が行っている方法はVirtualQuery()、空きとしてマークされ、割り当てを行う必要がある境界内にあるメモリ領域を検索するために使用しています。私が見ているのは、領域がマークされているにもかかわらずMEM_FREE VirtualAlloc()、メモリの割り当てに失敗することがあるということです。

コードは次のコードに非常に近いです。

VirtualAlloc()失敗したらGetLastError()リターンERROR_INVALID_ADDRESS (487).

私がこれを回避した方法は、それが十分に大きい場合は、mbi.RegionSizeページ サイズのステップを使用してスキャンし、必要なメモリを割り当てることができるアドレスを見つけることです。

VirtualQuery領域全体が解放され、必要なアドレス内に割り当てることができるはずですが、通常、最初のアドレスがVirtualAlloc失敗すると、最終的に成功するまでいくつかのステップをループする必要があるのはなぜですか。