2011-08-12 9 views
0

intが4バイトのデータを使用していると仮定して、長さが8バイトを使用すると仮定すると、0〜3バイトのメモリ位置から値を取得する必要があります それが返す価値を見てください。 誰もC#コードで助けてくれますか?ポインタ位置のメモリから値を読み取る

よろしく、 VIX

+0

自分のプロセスまたは別のプロセスですか? – CodesInChaos

答えて

1

これは、アドレスを取得しているとどのようにあなたはそれが有効であることを評価しているか、非常に危険なことだろうか?すべてのアドレスが有効なわけではなく、一部のアドレスからの読み取りを試みると例外が発生します。

しかし、Marshal.Read*メソッドを使用することができます。

int intValue = Marshal.ReadInt32(addr); 
long longValue = Marshal.ReadInt64(addr); 

また、AccessViolationExceptionもキャッチする必要があります。

また、仮想アドレスまたは物理メモリから読み取ろうとしていますか。 C#からは、プロセスのvirtual address spaceからのみ読んでいます。カーネルモードのドライバを使用して、コンピュータの物理メモリに直接アクセスする必要があります。

+0

アクセス違反をキャッチする必要がある場合は、おそらく間違っていました。 – CodesInChaos

+0

int i = 16; long j = 56; int * p1; long * p2; p2 =&j; p1 =&i; intが4バイトで割り当てられ、0から3バイトのintに格納された値を読み込みたい場合は、 のsimilary 0-7バイトの長さを8バイトで長くします。 – Vix

+0

なぜ最初にポインタが必要ですか? intはすでにこれらのバイトを含んでいます。 – CodesInChaos

関連する問題