Memory Write

01/11/2012 17:28 maxi39#1
Moin,

ich mach grad ein c++ trainer tutorial durch, hab auch alles bis auf eine kleine sache verstanden ...

Nur von der logik her:

hier mit deklariere ich doch was der neue wert sein soll :

Code:
BYTE AmmoValue[] = {0xA3,0x1C,0x0,0x0};
und damit schreib ich den neuen wert:

Code:
WriteProcessMemory( hProcHandle, (BYTE*)AmmoAddressToWrite, &AmmoValue, sizeof([B]AmmoValue[/B]), NULL);
aber wieso schreibt man nicht bei der ammovalue :

Code:
int AmmoValue = 100
WriteProcessMemory( hProcHandle, (BYTE*)AmmoAddressToWrite, &AmmoValue, [B]AmmoValue[/B], NULL);
oda bin ich da total auf dem holzweg?

also das erste funkt auch ^^
01/11/2012 17:34 HardCore.1337#2
das & bedeutet, das du die Adresse der Variable angibst.
Bei dem ersten Beispiel ist damit die Startadresse gemeint (also das komplette Array).
Bei zweitem gibst du auch die Adresse der Variable an, nicht aber ihren Wert.
01/11/2012 18:18 maxi39#3
Quote:
Originally Posted by HardCore.1337 View Post
das & bedeutet, das du die Adresse der Variable angibst.
Bei dem ersten Beispiel ist damit die Startadresse gemeint (also das komplette Array).
Bei zweitem gibst du auch die Adresse der Variable an, nicht aber ihren Wert.
irwi bin ich schwer vom begriff

das hier hab ich übernommen:
Code:
BYTE AmmoValue[] = {0xA3,0x1C,0x0,0x0};
die beiden abschnitte hab ich selbst editiert
Code:
DWORD AmmoBaseAddress = {0x1025658}; 
DWORD AmmoOffsets[] = {0x52};
stehen jetzt die offsets, base mit ammovalue zusammen?

ich hab immer noch von autoit das im kopf:
Code:
_MEMORYPOINTERWRITE($ADDRESS, $HANDLE, $OFFSET, $value, " float")
Code:
WriteProcessMemory(
  __in   HANDLE hProcess,
  __in   LPVOID lpBaseAddress,
  __in   LPCVOID lpBuffer,
  __in   SIZE_T nSize,
  __out  SIZE_T *lpNumberOfBytesWritten
);
Code:
WriteProcessMemory( hProcHandle, (BYTE*)AmmoAddressToWrite, &AmmoValue, sizeof(AmmoValue), NULL);
Angenommen ich möchte den wert der adresse auf 10 ändern wie würde des dann aussehen?

jetzt in c++
01/11/2012 18:42 jacky919#4
Quote:
Originally Posted by maxi39 View Post

Code:
WriteProcessMemory( hProcHandle, (BYTE*)AmmoAddressToWrite, &AmmoValue, sizeof([B]AmmoValue[/B]), NULL);
Code:
WriteProcessMemory( hProcHandle, (BYTE*)AmmoAddressToWrite, &AmmoValue, [B]AmmoValue[/B], NULL);
sizeof() errechnet die Größe des angegebenen Datentyps in Bytes
(1 Byte entspricht 8 Bit)

Code:
WriteProcessMemory(
  __in   HANDLE hProcess,  // Handle zu deinem Prozess, erhälst du von OpenProcess()
  __in   LPVOID lpBaseAddress, //Addresse wo Daten hingeschrieben werden sollen
  __in   LPCVOID lpBuffer, //Daten die geschrieben werden sollen
  __in   SIZE_T nSize, //Größe der Daten in Bytes
  __out  SIZE_T *lpNumberOfBytesWritten //zur überprüfung der geschriebenen Daten
);
Diese Funktion hat nichts mit der Funktion aus AutoIt zu tun, bis auf die Tatsache das die AutoIt Funktion darauf zurückgreift. Du wirst kein Array mit Offsets angeben können!
01/12/2012 07:05 HardCore.1337#5
Quote:
Du wirst kein Array mit Offsets angeben können!
Natürlich geht das. Er hats doch schon erfolgreich gemacht.
01/12/2012 11:49 MoepMeep#6
Quote:
Originally Posted by HardCore.1337 View Post
Natürlich geht das. Er hats doch schon erfolgreich gemacht.
Komisch, ich seh da nur ein Offset ;o
01/12/2012 14:51 jacky919#7
Beschreibung des dritten Parameters, wo er die Offsets angeben will:
Quote:
Originally Posted by MSDN
A pointer to the buffer that contains data to be written in the address space of the specified process.
Ein Pointer zum Puffer, der die Daten enthält.
01/12/2012 16:51 HardCore.1337#8
Du hast recht. Ich hatte eigentlich auch die zu schreibenden Daten gemeint. Wurde bissel falsch verstanden.
01/12/2012 22:51 MrSm!th#9
Quote:
Originally Posted by HardCore.1337 View Post
das & bedeutet, das du die Adresse der Variable angibst.
Bei dem ersten Beispiel ist damit die Startadresse gemeint (also das komplette Array).
Bei zweitem gibst du auch die Adresse der Variable an, nicht aber ihren Wert.
Schwachsinn, lies den Code genauer.
Er hat das sizeof fett markiert und auch genau das ist der Unterschied zwischen den beiden Code Boxen.