0

VirtualAllocExを呼び出す必要があり、IntPtr が返されます。その関数を呼び出して空のアドレスを取得し、コードケーブをそこに記述できるようにします (これは別のプロセスにあります)。

結果を UInt32 に変換するにはどうすればよいですか?そのアドレスで最近 WriteProcessMemory() を呼び出すことができますか?

4

3 に答える 3

2

WriteProcessMemory を呼び出すときは、アドレスとして UInt32 ではなく IntPtr を渡す必要があります (WriteProcessMemory は整数ではなくポインターを想定しているため)。そのため、VirtualAllocEx によって返された IntPtr を UInt32 に変換しなくても直接使用できるはずです。

于 2009-04-25T07:15:06.687 に答える
1

(uint)ptr でキャストできます (うまくキャストできない場合は、最初に ptr.ToInt32() または ToInt64() を試してください。少なくとも、このアプローチの問題は知りません。 UInt32 の範囲が Int32 よりも大きく、非負側では Int64 と同じであることを考えると、それで十分なはずです。

Int32 が 64 ビット アーキテクチャでどのように動作するかはわかりませんが。IntPtr の理由は、ポインタを格納するプラットフォームに依存しない方法を提供するためだと思います。

于 2009-04-25T07:34:19.197 に答える
0

WriteProcessMemory の DLlImport が正しくありません。ベース アドレスはポインターであるため、IntPtr として定義する必要があります。

MSDN

DllImport ステートメントを修正する必要があります。

于 2009-04-25T07:43:00.847 に答える