2017-07-27 9 views
0

私は何をすることができるか見るために私は遊んでいるいくつかのゲームではメモリを使いこなしていますが、私のニーズを満足させるために修正されたメモリ編集クラスがあります。私の問題を引き起こしている値。このクラスは、フックを介して外部プロセスの値を変更するのに役立ちます。 bool値への書き込みC#メモリの編集ブール値

は、私が一番やりたいことであり、これは私が試みられてきたものですが、TBH、私は

public bool WriteBool(int Address, bool Value) 
{ 
    byte[] bArray = BitConverter.GetBytes(Value); 
    bool flag = Process_MemoryReaderWriter.WriteProcessMemory((IntPtr)this.Handle, (IntPtr)Address, bArray, 2, 0); 
    return flag; 

} 

それと間違っているかわからない、私はまた、いくつかのブール値を読み取る必要がありますこれは私が試みたものです。

public bool ReadBool(int Address) 
{ 
    IntPtr intPtr = IntPtr.Zero; 
    byte[] bArray = new byte[4]; 
    IntPtr intPtr1 = intPtr; 
    Process_MemoryReaderWriter.ReadProcessMemory((IntPtr)this.Handle, (IntPtr)Address, bArray, 2, out intPtr1); 
    int rBInt = BitConverter.ToInt32(bArray, 0); 
    int num = rBInt; 
    bool boolValue = num != 0; 
    return boolValue; 
} 

私は他のすべては、このプログラムが失敗するように見える最後のステップである正常に動作するようですとしてブール値が問題であることを決定しました。 あなたはおそらく私がこれで何をしているのか分かりませんが(証拠はうまくいかない)、助けがあれば助かります。もし可能であれば、これを覚えておいてください。

は、私はすべてのものを提供してきたと信じていますが、任意のより多くの情報が必要な場合、それはWriteProcessMemoryとReadProcessMemoryサイズ2のバイト配列を期待している(第4のように見えながら、:)

+1

メモリ内のブール値を構成する方法は、使用しているプラ​​ットフォームおよび/またはプログラミング言語によって異なります。通常、整数は0または1の整数として格納されますが、サイズが異なる場合があり、サイズが1,2、または4バイト(8であっても)です。サイズが正しいことを確認してください。 –

+1

'BitConverter'はシリアライゼーションのヘルパークラスであり、ターゲットが望むバイト数を与える魔法のメソッドではありません。 "Bool"は明確な型ではありません。特定のゲームでtrue値とfalse値がどのように表現されるかを知る必要があります(コンパイラ、プラットフォーム、 "低レベル"ハッキングに依存します...)。 'BitConverter.GetBytes(bool)'は、ゼロか1のいずれかの1バイトを返します。これは、決してあなたが望むものではありません。 – Luaan

答えて

0

BitConverter.GetBytes(bool)は、サイズ1のバイト配列を返します。お問い合わせくださいそれぞれのパラメータ)。それらを1に変更するとその問題は解決するはずです。ただ、明確に定義されていませんが、あなたは0と仮定しても安全であるべきか、他のシステムは、ブール値を扱う、あなたが知っているので

public bool ReadBool(int Address) 
{ 
    IntPtr intPtr = IntPtr.Zero; 
    byte[] bArray = new byte[1]; 
    Process_MemoryReaderWriter.ReadProcessMemory((IntPtr)this.Handle, (IntPtr)Address, bArray, 1, out intPtr); 
    return BitConverter.ToBoolean(bArray, 0); 
} 

:あなたのような何かを行うことができます読み取るためのよう加えて、BitConverterも、ToBooleanメソッドを持っています最低でも== falseです。あなたのコードを適切に調整する必要があるかもしれません(例えば、他のプロセスが4バイトのboolを使用する場合、ReadBoolメソッドが動作します)。

関連する問題