[C#]wert einer adresse ausgeben

06/14/2009 17:25 Gianotti#1
wie der titel schon sagt versuche ich den wert einer adresse auszugeben .

mein vorhaben :

per readprocessmemory den wert auslesen und dann in einer textbox anzeigen lassen . so weit so gut.

wenn ich es dann in der praxis probiere kommt sowas raus : 3021221321

hab ich was falsch gemacht? vllt sind das ascii zeichen die ich konvertieren muss

ich frage euch :D
06/14/2009 17:28 schlurmann#2
Wir können leider auch nicht hellsehen. Den Code musst du uns schon zeigen. :facepalm:
06/14/2009 17:31 Gianotti#3
Quote:
byte[] bytes = new byte[4];
byte[] bytes2 = new byte[4];
int Pos_x = 0x2090474;
int Pos_y = 0x209047C;
uint size = sizeof(int);
uint rw = 0;
bool read;
bool read2;
read = ReadProcessMemory(rhdl, (IntPtr)Pos_x, bytes, (UIntPtr)size, ref rw);
read2 = ReadProcessMemory(rhdl, (IntPtr)Pos_y, bytes2, (UIntPtr)size, ref rw);
die werte die ich auslese möchte ich ja in der textbox ausgeben :(
06/14/2009 17:39 ms​#4
Ist read bzw. read2 true oder false?
Du willst anscheinend irgendwelche Koordinaten auslesen. Verändern sich bytes bzw. bytes2 dann auch wenn du dich im Spiel bewegst?

Außerdem scheint mir 3021221321 wie eine ganz normale 4-Byte-Zahl. ;o
06/14/2009 17:41 schlurmann#5
Quote:
Originally Posted by Gianotti View Post
die werte die ich auslese möchte ich ja in der textbox ausgeben :(
Bist du sicher, dass der Prozess richtig und mit richtigen Rechte geöffnet ist?

Außerdem fallen mir da einige Dinge auf:

Ich bin nicht vertraut mit C#, aber was soll das mit dem byte Array? Ich schätze mal deine Position ist ein float oder int, warum speicherst du es in einem byte Array?

Warum machst du deine size als unsigned int aber deine Adresse nicht?

Was ist "ref"? So etwas wie der Adressoperator in C#?

ReadProcessMemory returnt BOOL und nicht bool. Ich weiß nicht ob es in C# auch so ist, aber in C++ ist bool eine 1 Byte elementarer Datentyp, während BOOL als integer deklariert ist.

Das mit dem byte Array ist Unfug. Der Rest sind nur Hinweise. Poste mal den ganzen Code.
06/14/2009 17:42 player tolga#6
...
06/14/2009 17:58 Gianotti#7
Quote:
Originally Posted by schlurmann View Post
Bist du sicher, dass der Prozess richtig und mit richtigen Rechte geöffnet ist?

Außerdem fallen mir da einige Dinge auf:

Ich bin nicht vertraut mit C#, aber was soll das mit dem byte Array? Ich schätze mal deine Position ist ein float oder int, warum speicherst du es in einem byte Array?

Warum machst du deine size als unsigned int aber deine Adresse nicht?

Was ist "ref"? So etwas wie der Adressoperator in C#?

ReadProcessMemory returnt BOOL und nicht bool. Ich weiß nicht ob es in C# auch so ist, aber in C++ ist bool eine 1 Byte elementarer Datentyp, während BOOL als integer deklariert ist.

,

Das mit dem byte Array ist Unfug. Der Rest sind nur Hinweise. Poste mal den ganzen Code.
1. ich besitze alle rechte die ich benötige da es keine errors gibt.
2. in dem byte array wird nichts gespeichert
3.jup mit dem ref hast du recht
4.ob bool oder BOOL c# ist da nicht so kritisch wie c++ ;)
5.ich habe da eine idee...
06/14/2009 18:07 Cholik#8
int var1 = BitConverter.ToInt32(bytes, 0);
bzw
int var2 = BitConverter.ToInt32(bytes2, 0); könnte dir evtl helfen.
06/14/2009 18:08 ms​#9
Quote:
Originally Posted by Gianotti View Post
2. in dem byte array wird nichts gespeichert.
Quote:
Originally Posted by MSDN
BOOL WINAPI ReadProcessMemory(
__in HANDLE hProcess,
__in LPCVOID lpBaseAddress,
__out LPVOID lpBuffer,
__in SIZE_T nSize,
__out SIZE_T *lpNumberOfBytesRead
);
Ich meine schon.
06/14/2009 18:11 Cholik#10
Mjo mjo is schon richtig ;O in lpBuffer werden die ausgelesenen Bytes gespeichert.
06/14/2009 18:13 Gianotti#11
Quote:
Originally Posted by Cholik View Post
int var1 = BitConverter.ToInt32(bytes, 0);
bzw
int var2 = BitConverter.ToInt32(bytes2, 0); könnte dir evtl helfen.
Quote:
Originally Posted by Disconnect View Post
Ich meine schon.
wow danke es geht jetzt :handsdown:

und @disconnect : wusste ich nicht. dachte das wäre für die maximale größe des wertes der adresse
06/14/2009 18:57 schlurmann#12
Anstatt da dumm umzuwandeln nimm einfach ein int. o.O
06/14/2009 19:10 Cholik#13
"dumm umwandeln" musst du so oder so

naja und n ExceptionHandler ist beim BitConverter ja auch noch bei :P
06/14/2009 19:28 ms​#14
Ich glaube nicht.


Denn wenn du beispielsweise folgendes schreibst:
Code:
int i = 9
dann steht im Speicher (vorrausgesetzt natürlich int entspricht 32 Bit):
Code:
09 00 00 00
06/14/2009 19:30 Gianotti#15
Quote:
Originally Posted by Disconnect View Post
Ich glaube nicht.


Denn wenn du beispielsweise folgendes schreibst:
Code:
int i = 9
dann steht im Speicher (vorrausgesetzt natürlich int entspricht 32 Bit):
Code:
09 00 00 00
ehm er schreibt es so wie ich es wollte . o.0