問題タブ [readprocessmemory]
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.
python - Python 64ビット、Ctypes ReadProcessMemory ERROR_PARTIAL_COPY、Windows764ビット
私の例は、「Gray Hat Python」(http://expect-us.net/files/Gray%20Hat%20Python%20=rwt911=.pdf)という本に基づいています。
小さなサンプルアプリケーションprintf_loopがあります:
現在、このアプリケーションで使用されているprintfのアドレスを取得しようとしています。しかし、ReadProcessMemory呼び出しは常にERROR_PARTIAL_COPYを返します。
次の関数全体でアドレスを取得しています。ここで、dll='msvcrt.dll'およびfunction='printf'です。
なぜ私が記憶を読めないのか、何か提案はありますか?
delphi - アセンブリ x64 を使用する DelphiXE2 によるメモリからの読み取り
DelphiXE2
の任意のメモリ アドレスにアクセスするにはどうすればよいWindows7 64bit
ですか? 関数を使用しようとしましたが、ReadProcessMemory
機能しません。ただし、カーネルドライバーを使用してこれを行うことは避けたいと思います。
私の悪い英語でごめんなさい。
c# - C# ポインター オフセット > 255 - ProcessMemoryReader
「ProcessMemoryReader」関数の使用方法を示すチュートリアルがたくさんあることは知っています。しかし、この問題は独特であるか、まだ解決されていないようです。
かなり長い間、私は他の人のコードを掘り下げて、複数のオフセットを使用する方法を見つけてきました。そして、複数のオフセットを使用することが問題だと思っていましたが、オフセット値が 255 よりも大きいことが問題だと思います。
私がメモリ値を取得しようとしているゲームは、「アサルトキューブ」と呼ばれています。正しいオフセット値を取得したかどうかわからなかったので、他の結果がどこにあるかをグーグルで調べました。それらはまったく同じようです: http://cheatengine.org/tables/moreinfo.php?tid=1142 (チート エンジンがインストールされていない場合は、メモ帳で .ct ファイルを表示できます。)
を使用した私のコードは次のとおりですProcessMemoryReader.cs
。
単一のポインターを使用しても、プロセスは正常に機能します。次に例を示します。
ここで何が起こっているかは非常に簡単ですが、複数のオフセットを使用して弾薬コードを読み取る方法がわかりません。
c# - プロセスメモリ内のC#検索バイト配列
特定のアプリケーション用の小さなメモリ スキャナーを開発しています。スキャンするプロセスを選択するとき、最初にしたいことは、プロセスが特定のアプリケーションのインスタンスであることを確認することです...そしてこれを行うには、そのメモリ内のどこかにある可能性のある署名を見つける必要があります。
これが私のコードです:
このメソッドが決して完了に達せず、無限にループしているように見えるという最初の問題 (昨日、最後に到達することなく、デバッグ目的で 1 時間以上実行させました)。ERROR_PARTIAL_COPY (0x0000012B)
ループ内で Marshal.GetLastWin32Error() をチェックすると、呼び出し後にエラーが発生することがあることに気付きましたReadProcessMemory
...これは考えられる原因ですか?
次に、いくつか質問があります。
1)OpenProcess
スキャン ループに進む前に電話する必要がありますか? そうは思いませんよね?
2) アプリケーションを x32 と x64 の両方に対応させたいと考えています。address
両方のシステム (制限、値の型address
、RegionSize
キャストなど)で適切に動作するようにするには、コード内で何を変更する必要がありますか?
3) ターゲットのバイト配列を見つけるためにプロセス メモリをスキャンしているときに、現在MEMORY_BASIC_INFORMATION
の のプロパティ ( AllocationProtect
、State
、Protect
および/または) をチェックして、現在の領域lType
をスキップできるかどうかを確認する必要があります。ReadProcessMemory
読まれる?
4) このメソッドの速度を最適化するために他にできることはありますか?これは非常に重要です。
c - VirtualQueryEx は、領域サイズが -1 の MEMORY_BASIC_INFORMATION を返します
私はメモリスキャナを書いています。最初に への呼び出しを使用してVirtualQueryEx
メモリ ベース アドレスと領域サイズを取得しstruct MEMORY_BASIC_INFORMATION
、次に への呼び出しを使用しReadProcessMemory
てメモリを読み取ります。
私が直面している問題VirtualQueryEx
はMEMORY_BASIC_INFORMATION.Region Size
、-1
.
なぜそれをするのですか?これはどういう意味-1
ですか?
c# - C# プログラマーによる C++ の ReadProcessMemory が一貫して失敗する
私は C++ について漠然とした知識を持っていますが、C# についてはかなりの経験がありますが、この例ではあまり役に立ちません。私は C# でいくつかのコードを持っていますが、問題なく動作します。私は、C++ で非常によく似たコードであると推測するものを持っていますが、それを機能させたり、デバッグしたりすることができないようです。だから、ここに私が書いて徹底的にテストしたC#コードがあります:
したがって、この関数 ReadInt32 はアドレスを取得し、それを Util クラスの初期化時に格納したベース アドレスに追加し、初期化時に再度取得されるハンドルを使用して最大 4 バイトのメモリを読み取ります。値を正しく設定すれば、これが機能することは 100% わかっています。
このコードは少し長いです。無知で申し訳ありませんが、想像に任せたくありません。C++ の世界で十分な訓練を受けていないため、何が間違っているのかを示唆することはできません。
読み取ろうとしているメモリ アドレスは 0x3BE1E0 ですが、これにベース アドレス (0x20C8) を追加して 0x3C02A8 を取得しました。このサイトの読者はハンドルを知っていると思います...
お時間をいただきありがとうございます。答えよりも、私が間違っていることの説明を望んでいることに注意してください。時間があれば、それを心に留めておいてください。とにかく結果を調査できる可能性が高いので、答えで十分です。
出力は次のとおりです。