Pointer und Offsets?

08/10/2013 21:55 BladeTiger12#16
Naja um dir jetzt echt mal ein bisschen zu helfen:

Code:
#AutoIt3Wrapper_UseX64=n
#include <Pointer.au3>

$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
	MsgBox(48, "Error", "Process doesn't exists!")
Else
	$phHandles = _MemoryOpen($dwProcessId)
	If @error Then
		MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
	Else
		$lpBaseAddress = 0x0356DC90
		Dim $pOffsets[2] = [0xAC, 0x48]
		$lpMemoryData = _MemoryRead(_MemoryRead(_MemoryRead($lpBaseAddress, $phHandles) + $pOffsets[0], $phHandles) + $pOffsets[1], $phHandles, 'dword')
		ConsoleWrite("Value: " & $lpMemoryData)
		MsgBox(64, "Info", & "Value: " & $lpMemoryData)
		_MemoryClose($phHandles)
	EndIf
EndIf
#Edit:
Kleiner Fehler Fix
08/10/2013 22:12 blackout617#17
Quote:
Originally Posted by BladeTiger12 View Post
Naja um dir jetzt echt mal ein bisschen zu helfen:

Code:
#AutoIt3Wrapper_UseX64=n
#include <Pointer.au3>

$szProcessName = "MultiClient.exe"
$dwProcessId = ProcessExists($szProcessName)
If $dwProcessId == 0 Then
	MsgBox(48, "Error", "Process doesn't exists!")
Else
	$phHandles = _MemoryOpen($dwProcessId)
	If @error Then
		MsgBox(48, "Error", "Can't open " & $szProcessName & "! @error: " & @error)
	Else
		$lpBaseAddress = 0x0356DC90
		Dim $pOffsets[2] = [0xAC, 0x48]
		$lpMemoryData = _MemoryRead(_MemoryRead(_MemoryRead($lpBaseAddress, $phHandles) + $pOffsets[0], $phHandles) + $pOffsets[1], $phHandles, 'dword')
		ConsoleWrite("Value: " & $lpMemoryData)
		MsgBox(64, "Info", & "Value: " & $lpMemoryData)
		_MemoryClose($phHandles)
	EndIf
EndIf
#Edit:
Kleiner Fehler Fix
Endlich funk es sehr vielen dank kanst du mir auch bitte erkleren ? woher komt 0x00400000 + 0x3E6948 ? :)
08/10/2013 22:21 KDeluxe#18
0x00400000 ist in der Regel der "Einstiegspunkt" eines Prozesses.

Er hat im Endeffekt nur die Werte genommen, die du im ersten Beitrag geschrieben hast:
Quote:
Originally Posted by blackout617 View Post
MAX HP = 007E6938 Offset1:AC Offset2:48
Das deckt sich allerdings nicht mit den Werten deines Screenshots, deshalb habe ich sie nie hergenommen. Wohl ein Fehler gewesen.

Die Hex-Ausgabe liegt übrigens an folgender Zeile in der Pointer.au3:
Code:
$iv_Address = '0x' & hex($iv_Data[1] + $av_Offset[$i])

Könntest du folgenden Code mal ausprobieren:
Meine UDF hat eine ausführlichere "Fehlerbehandlungsmöglichkeit". Deshalb hast du bei meiner UDF auch die Fehlermeldung bekommen, wohingegen die _MemoryPointerRead() Funktion einfach nur "0" zurück liefert und den Funktionsaufruf von "ReadProcessMemory" überhaupt nicht nach Richtigkeit überprüft.
08/10/2013 22:27 BladeTiger12#19
Nicht nur das KDeluxe, seine Adresse im ersten Post kann stimmen,
und die Adresse: 0x0356DC90 ist falsch gewesen.
08/10/2013 22:43 KDeluxe#20
Selbst die Adresse aus dem 1. Beitrag ist falsch (Differenz von 0x10).

"Richtig" war es in diesem Beitrag:
Quote:
Originally Posted by blackout617 View Post
Quote:
#include <Pointer.au3>
$PID = ProcessExists("MultiClient.exe")
$MemOpen = _MemoryOpen($PID)

Global $Offset[3]
$Offset[0] = 0
$Offset[1] = Dec("48")
$Offset[2] = Dec("AC")
$StaticOffset = Dec("003E6948")

$BaseAddr = _MemoryGetBaseAddress($MemOpen, 1)
$Addr = "0x" & Hex($baseADDR + $StaticOffset)

$Value = _MemoryPointerRead($Addr, $MemOpen, $Offset)

while 1
Tooltip ($Value[1])
WEnd
Die "MultiClient.exe" hat mich aber schon die ganze Zeit gestört. Bei dieser ist der Einstiegspunkt eben nicht 0x00400000 sondern 0x03187348. Ich nehme aber einfach mal an, dass die "MultiClient.exe" die "NostaleX.dat" lädt und ausführt, wodurch die richtige Adresse wieder 0x007E6948 und nicht 0x0356DC90 ist. Das sind natürlich wieder "Sonderfälle".
08/10/2013 22:44 blackout617#21
ok danke,3E6948 habe ich werstanden das ist bei c.e. beim pointer scan die base adresse :)

0x00400000 ist die einstieg adressse
$lpBaseAddress = 0x00400000 + pointer base adresse(die ersten 2 zahlen löschen und dan schreiben

MultiClient.exe ist die NostaleX.dat nur als multiclient gemacht :)
08/10/2013 22:50 KDeluxe#22
Was meinst du damit? CE zeigt als "Base Address" nicht E6948 an sondern "MultiClient.exe"+3E6948. Beides gehört zusammen und ist die "Base Address".
Das war aber auch schon das Problem, da "MultiClient.exe"+3E6948 = 0x0356DC90 ist. Richtig wäre aber 0x007E6948. Du kannst in CE ja mal "NostaleX.dat"+3E6948 ausprobieren, vielleicht funktioniert es ja.

Quote:
Originally Posted by KDeluxe View Post
Könntest du folgenden Code mal ausprobieren:
Meine UDF hat eine ausführlichere "Fehlerbehandlungsmöglichkeit". Deshalb hast du bei meiner UDF auch die Fehlermeldung bekommen, wohingegen die _MemoryPointerRead() Funktion einfach nur "0" zurück liefert und den Funktionsaufruf von "ReadProcessMemory" überhaupt nicht nach Richtigkeit überprüft.
08/11/2013 00:23 blackout617#23
Also bei heist das jetzt NostaleX.dat werden die pointers,base adress,offsetse nicht funk. die ich bei MultiClient.exe gefunden habe ?

und noch eine kleine frage wie kan ich mit pointer.au3 memory write benutzen ?
Habe das wersucht geht nicht :)
Code:
$r = 0x00400000 + 0x3E6578
	$r = _MemoryRead($r + $pOffsets[10],$phHandles)
	$r = _MemoryRead($r + $pOffsets[11],$phHandles)
$Test = _MemoryWrite($r+ $pOffsets[11], $phHandles, "1082599999")
08/11/2013 02:26 KDeluxe#24
Grundsätzlich schon. Ich empfehle dir dennoch weiterhin meine UDF zu verwenden und nicht die Pointer.au3.
Du solltest dann auch einfach die Offsets als Parameter übergeben. Ich vermute aber mal, dass in deinem $pOffsets Array alle Offsets gespeichert sind, die du hast. Das müsstest du dann natürlich ändern.
Ich habe keine Lust deinen aktuellen Fehler genauer zu beschreiben, da ich der Meinung bin, dass du meine UDF verwenden solltest, deshalb kurz.
Code:
$r = _MemoryRead($r + $pOffsets[11],$phHandles)
Diese Zeile musst du aus dem Code entfernen.