Seite 1 von 1
Brauche Hilfe beim Übersetzen von drei Zeilen C Code
Verfasst: 18.11.2006 14:46
von Glow
Hi
Also, ich versuche gerade mal Spasseshalber ein bissel alten C Code in PB zu porten. Allerdings will das ganze nicht so wie ich :P
Die Hauptprobleme sind folgende. Das ganze zeigt jetzt einfach mal den C Code.
Code: Alles auswählen
DWORD MyVar[8];
ReadProcessMemory (MyPID, (VOID *)0x00000000, MyVar, sizeof(MyVar), &read);
if (read != sizeof(MyVar))
{
puts ("Konnte Speicherwert nicht lesen :(");
return;
}
printf ("Speicherwert ist: %d\n", MyVar[6]);
Ich komme echt nicht drauf, wie das ganze in PB funktionieren könnte ?
Bei mir klappt das jedenfalls kein Stück. Jemand eine Idee ?
Gruß
Glow
Verfasst: 18.11.2006 16:09
von edel
Was geht nicht ? Den Ausschnitt zu uebersetzen bringt eh nichts, da die haelfte fehlt.
Verfasst: 18.11.2006 16:16
von Glow
Hi
Mir geht es dabei rein um die Schreibweisse in PB.
Z.B:
wäre das gleichzusetzen mit
Oder wie schaffe ich es, das Array in PB so aufzubauen, daß es
a) über ReadProcessMemory_ durchgehend gefüllt wird, und
b) trotzdem in 4byte Blöcken über das Arrayitem angesprochen werden kann ? Also wenn ich z.B folgende Definition habe:
DWORD MyVar[2] // 3 Items passen ins Array von 0-2, jeweils 4 Byte
Über ReadProcessMemory wird es nun gefüllt mit z.B
0 = 0A0A0A0A
1 = 0B0B0B0B
2 = 0C0C0C0C
damit ich dann später über MyVar(1) 0B0B0B0B erhalte ? Ich bekomme das mit Dim irgendwie nicht hin :/
Verfasst: 18.11.2006 16:27
von edel
Sollte so gehen , weiss nur nicht was es an der Adresse 0 zum lesen
geben sollte. Falls es Fehler geben sollte lass dir den Wert von
GetlastError_() ausgeben
Verfasst: 18.11.2006 16:56
von Glow
Also bei mir sieht das jetzt so aus:
Code: Alles auswählen
Dim MyVar1.l(0)
Dim MyVar2.l(8)
dim MyVar3.l(14)
ReadProcessMemory_(pID, $1AB2101, @MyVar1, SizeOf(MyVar1), @TmpBuf)
ReadProcessMemory_(pID, MyVar1, @MyVar2, SizeOf(MyVar2), @TmpBuf)
ReadProcessMemory_(pID, MyVar2(4), @MyVar3, SizeOf(MyVar3), @TmpBuf)
Es erfolgt eine überprüfung of TmpBuf & Sizeof(MyVar3) gleich sind. Da schlägt es momentan fehl. Der ausgegebene Fehler lautet:
Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen.
Ich kapier das nicht, der C-Code funktioniert einwandfrei :/
Verfasst: 18.11.2006 17:27
von edel
Die Adresse eines Arrays bekommst du durch MyVar1() .
pID sollte ein Handle sein , das man z.b. von OpenProcess_([...])
bekommt. Der 2. Wert muss eine Adresse auf einen Speicherbereich
sein.
Code: Alles auswählen
Dim MyVar(7)
adresse = 0 ; hier die adresse angeben
nread = 0
MyPID = GetCurrentProcessId_()
hProcess = OpenProcess_(#PROCESS_VM_READ,0,MyPID)
If Not ReadProcessMemory_(hProcess, adresse , MyVar(), 8*4, @nread) = 0
Debug nread
EndIf
Verfasst: 18.11.2006 20:37
von Glow
Hi
Der Aufbau von ReadProcessMemory war mir schon klar, nur nicht wie ich die Arrays innerhalb nutzen muss. Dein Code hat mir trotzdem geholfen, da er das fehlende Puzzleteil enthalten hat:
MyVar()
Ich hatte innerhalb der API @MyVar geschrieben, und deshalb hat es nicht funktioniert. Jetzt klappt alles so wie es soll

Der Punkt war ja, dass innerhalb der vorhergehenden Arrays weitere Speicheradressen "versteckt waren" die ich nach und nach auslesen musste.
Vielen Dank nochmal für deine Mühe.
Gruß
Glow