問題タブ [virtualalloc]

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 投票する
1 に答える
1696 参照

c++ - virtualallocの問題

mainhashbuf、progression、virtualpointerはcharへのポインタです。最初にスペースを予約し、仮想ポインターがそのスペースを指すようにします。次に、他の2つのポインターを仮想ポインターに等しく設定します。次に、プログレッション(現在はリザーブスペースも指している)を使用してそのスペースのコミット(1 << 15)を行い、プログレッションポインターをインクリメントします。次に、mainhashbufがポイントする必要がある現在コミットされているスペースに値を設定しようとしますが、書き込み例外が発生します。virtualallocを間違って使用しているか、ポインターが実際にどのように機能するかについて間違った概念を持っていますか?

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

linux - VirtualAllocに似たメモリの領域を割り当てる方法は?

Windows の VirtualAlloc に似た Linux でメモリを割り当てる方法を探していました。要件は次のとおりです。

  1. 割り当てるメモリ ブロックのサイズは 2^16 です。
  2. メモリ ブロックのアドレスが 0x0000ffff より大きい
  3. メモリ ブロックのアドレスは、最後の 16 ビットがゼロでなければなりません。

Windows では、アプリケーション アドレス (lpMinimumApplicationAddress) の下限のため、(2) 明らかな権利があります。(1)、(2)、システムルールから、(3)も達成できました。

助けてくれてありがとう。

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

c++ - 新規/削除[] と VirtualAlloc

これは私のためにクラッシュします

VirtualAlloc が原因でこれがクラッシュしていることはわかっていますが、これを修正する方法がわかりません...

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

c++ - VirtualAlloc アドレス

以下のコードを書きます

ただし、VirtualAlloc は失敗し、ptr1、ptr2 の値は常に NULL です。アドレス 0x70000000,0x80000000 を使いたいです。これらのアドレスを使用する方法を知っている人はいますか?

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

c# - VirtualAlloc を使用してバイト配列からプログラムを実行していますか?

私は C# でアプリケーション SFX / プロテクターに取り組んでおり、リバース エンジニアリングをより困難にするために、保護されたアセンブリをハードディスクに書き込むのではなく、バイト配列から実行したいと考えています。

バイト配列 (有効なエントリ ポイントを持つ) 内にプログラムがあり、それを実行したいと考えています。このウェブサイトで、これを行うにはどうすればよいかという同様の質問を見つけました。これは、以下のコード スニペットを使用して実行できることを知っていますが、これを使用してバイト配列からプログラムを実行する方法を教えてもらえますか?

技術的には、彼は以下のコードで私にこれをさせてくれました:

この回答を実装して、バイト配列からプログラムを実行するにはどうすればよいですか。このコードで何ができるのか正確に理解できません。助けてください

これは私がこの答えを見つけたリンクです: Is it possible to execute an x​​86 assembly sequence from within C#?

どんな助けでも大歓迎です。

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

winapi - 大規模な配列で VirtualAlloc を使用してメモリを予約することとコミット + 予約することの利点

基本的に非常に大きな配列で動作する C++ プログラムを作成しています。Windows では、VirtualAlloc を使用してメモリを配列に割り当てています。これで、VirutalAlloc を使用してメモリを予約することとコミットすることの違いを完全に理解できました。ただし、メモリをページごとに予約領域にコミットすることに利点があるかどうかは疑問です。特に、MSDN ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366887(v=vs.85).aspx ) には、MEM_COMMIT オプションに関する次の説明が含まれています。

仮想アドレスが実際にアクセスされない限り、または実際にアクセスされるまで、実際の物理ページは割り当てられません。

私の実験では、これが確認されています。プロセスのメモリ使用量を増やすことなく、数 GB のメモリを予約してコミットできます (タスク マネージャーに表示されるように)。実際のメモリは、実際にメモリにアクセスしたときにのみ割り当てられます。

ここで、アドレス空間の大部分を予約してから、メモリをページごとに (またはアプリのロジックによってはより大きなブロックで) コミットする必要があると主張する例をかなり見てきました。ただし、上で説明したように、メモリはアクセスする前にコミットされているようには見えません。したがって、ページごとにメモリをコミットすることに実際の利点があるかどうか疑問に思っています。実際、メモリをページごとにコミットすると、実際にメモリをコミットするための多くのシステム コールが原因で、実際にはプログラムの速度が低下する可能性があります。領域全体を一度にコミットすると、システム コール 1 回分の料金が発生しますが、カーネルは、実際に使用するメモリのみを実際に割り当てるのに十分なほど賢いようです。

どちらの戦略が優れているかを誰かが説明してくれれば幸いです。

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

memory-management - 特定のアドレスでページをマッピングする

VirtualAllocを使用して仮想メモリページをマップしようとしていますが、これは8TBのWindows 7 64ビット許容範囲外の特定のアドレスです。WindowsInternalsの本で読んだことがありますが、このアドレス範囲は「ページテーブルの自己マッピング構造」に使用されます。 、0x7ffffffff000アドレスでメモリページをマップする方法はありますか?

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

c++ - Windows でのヒープ破損エラーの即時検出。どのように?

眠れません!:)

Windows でかなり大きなプロジェクトを実行しており、ヒープ破損の問題が発生しました。この素敵なトピックを含むすべての SO を読みました:ヒープ破損エラーをデバッグするには? 、しかし、すぐに使用できるものは何もありませんでした。Debug CRTヒープのBoundsChecker破損が検出されましたが、アドレスは常に異なり、検出ポイントは常に実際のメモリの上書きから遠く離れていました。私は真夜中まで寝ていなかったので、次のハックを作成しました。

いくつかのヒープ破損エラーが明らかになり、修正することができました。終了時に Debug CRT 警告が表示されなくなりました。ただし、このハックに関していくつか質問があります。

1.誤検知を引き起こす可能性はありますか?

2.ヒープの破損を見逃すことはありますか? (malloc/realloc/free を置き換えても?)

3. 32 ビットでは実行できOUT_OF_MEMORYず、64 ビットでのみ実行されます。32ビットの仮想アドレス空間を使い果たしただけでいいのでしょうか?

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

c - VirtualQueryEx を使用してリモート プロセスでモジュールを列挙しても、すべてのモジュールが返されない

特定のプロセスが使用している DLL のリストを取得しようとしています。VirtualQueryEx を使用してそれを達成しようとしています。私の問題は、DLL のすべてではなく部分的なリストだけが返されることです (プロセス エクスプローラーを使用するか、指定されたプロセスで VirtualQuery を使用してリストを表示できます)。

コードは次のとおりです。

で結果を取得していszBufます。

この関数は DLL ファイルの一部であるため、デバッグが困難です。

現在、DLL は x64 バイナリとしてコンパイルされており、x64 プロセスに対して使用しています。

PS私はEnumProcessModulesについて知っていますが、理由でそれを使用していません(長すぎます:)。

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

windows - コード領域の32ビット変位内の実行可能メモリ

64ビットWindows上のC++でJITコンパイラを作成すると、生成されたコードは、C++で作成されたランタイム関数を呼び出す必要がある場合があります。現時点では、生成されたコードを配置するためのメモリを割り当てていVirtualAlloc(0, bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE)ます。割り当てられたメモリは他の方法では実行できないため、最後のフラグは重要です。

VirtualAllocおそらく64ビットアドレス空間のどこにでもメモリを返すことができます。これはデータには問題ありませんが(一般に4ギガバイト以上が必要になるため、64ビットアドレス指定が必要です)、x64call命令の最も効率的な形式です。 32ビットのIP相対オフセットが必要であり、生成されるコードの量は4ギガバイト未満になるため、C++からコンパイルされたコードの32ビットの変位内に配置することが望ましいでしょう。

これを手配する方法はありますか?