Adresse + offsets

03/18/2015 14:03 maxi39#1
Moin,

Quote:
#include "pointer.au3"







$PID = ProcessExists("mc2.exe")

$Handle = _MemoryOpen($PID)
$Address = _MemoryModuleGetBaseAddress(ProcessExists("mc2.exe "), "mc2.exe")
$address = "0x" & Hex($address + Dec("2C2720"))

Dim $offset[5] = [0, Dec("24"), Dec("1898"), Dec("20"), Dec("2c")]
$Read= _MemoryPointerRead($Address, $Handle, $Offset, "float")



for $n = 1 to 2

$Read[0] = 0x7c + $Read[0]
Next
InputBox(0,"",hex($Read[0]))
wo ist der fehler, dass nicht wenn angenommen $read[0] = 73DF094
nicht 73DF110 rauskommt sondern sowas in der art 4095500000000000

Quote:
$ad = 0x73DF094

for $n = 1 to 3

$ad = 0x7c + $ad
Next
MsgBox(0,"",hex($ad))
das funktioniert


LÖSUNG

03/18/2015 14:32 BladeTiger12#2
Dann schreib das mal so:

Code:
$neueAdresse = 0x73DEB40 + 0x7C * Hex($x)
03/18/2015 15:02 alpines#3
0x73DEB40 + 0x7C * 3 erreicht dasselbe.
03/18/2015 16:22 BladeTiger12#4
In diesem Fall stimmt es :D.
Aber falls er nun x immer als Dezimalzahl angeben will (Auch wenn es nicht schlau ist), dann wäre Hex schon wichtig.
03/18/2015 16:29 maxi39#5
das funkt.
für x = 1
ich lese die adresse aus Read[0] = 0x00000000073DEB40
$neueAdresse = Read[0]+ 0x7C * Hex(1)

dann ist
$neueAdresse = 124
wieso wird read[0] 0 ? wenn ich 0x00000000073DEB40 direkt einsetze:
$neueAdresse = 0x00000000073DEB40 + 0x7C * Hex(1) dann bekomm ich für $neueAdresse ein Dezimalwert, den ich nach hex umwandeln kann und dieser stimmt dann auch.
03/18/2015 16:41 alpines#6
Weil du ihn glaube ich als String dann einsetzen musst, und das verkraftet AutoIt nicht. Du musst die "0x000..." erstmal mit Number() oder mit Hex() / Dec() in einem Zahlenwert konvertieren.
03/18/2015 21:20 maxi39#7
$neu = StringReplace($Read[0],"0x","")

$neu2 = "0x"&(0x7c * "0x" & hex(10))
$Readx= Dec($neu) + $neu2

InputBox(0,"",$Readx) liefert mir: 121498336
InputBox(0,"",hex($Readx)) liefert mir: 419CF7AB80000000
InputBox(0,"",hex(121498336)) liefert mir 73DEAE0


wieso um alles in der welt liefert mir InputBox(0,"",hex($Readx)) so etwas?

€ die dezimalzahl 121498336 ist richtig und ich will sie als hex haben.

2€ Problem gelöst: hex(Hex(Dec($Readx)))
03/19/2015 12:06 BladeTiger12#8
Was wird das? :D
Warum benutzt du immer String.
Es würde reichen wenn du schreibst:

$neu2 = 0x7C * 0xA ;hex(10)
$Readx = Dec($neu) + $neu2
03/19/2015 14:52 maxi39#9
ich möchte aus einem spiel einen bestimmten eintrag aus einer matrize auslesen. es gibt 700 matrizen. zuerst ermittel ich die adresse vom ersten eintrag.
#include "pointer.au3"







$PID = ProcessExists("mc2.exe")

$Handle = _MemoryOpen($PID)
$Address = _MemoryModuleGetBaseAddress(ProcessExists("mc2.exe "), "mc2.exe")
$address = "0x" & Hex($address + Dec("2C2720"))

Dim $offset[5] = [0, Dec("24"), Dec("1898"), Dec("20"), Dec("2c")]
$Read= _MemoryPointerRead($Address, $Handle, $Offset, "float")

Die Adresse wäre dann Read[0]. Da der abstand der einträge die ich brauche immer 7c beträgt, rechne ich einfach $read[0] + 7c * hex($x)

Jedoch möchte ich das x selbst bestimmen heißt: $x=guictrlread($input)
die matrizen beinhalten die koordinaten von objekten auf einer map. x steht für
die objekt nummer .


damit gehts einfach

$ad = 0x073DEB40

for $n = 1 to 11

$ad = 0x7c + $ad
Next
MsgBox(0,"",hex($ad))

ich steh wieder am anfang...



Code:
#include "pointer.au3"







$PID = ProcessExists("mc2.exe")

  $Handle = _MemoryOpen($PID)
    $Address = _MemoryModuleGetBaseAddress(ProcessExists("mc2.exe"), "mc2.exe")
$address = "0x" & Hex($address + Dec("2C2720"))

Dim $offset[5] = [0, Dec("24"), Dec("1898"), Dec("20"), Dec("2c")]
$Read= _MemoryPointerRead($Address, $Handle, $Offset, "float")



for $n = 1 to 2

$Read[0] = 0x7c + $Read[0]
Next
InputBox(0,"",hex($Read[0]))
wo ist der fehler, dass nicht wenn angenommen $read[0] = 0x73DF094
nicht 73DF110 rauskommt sondern sowas in der art 4095500000000000
03/19/2015 16:24 alpines#10
Das ist leider z. Z. wohl das größte Problem bei AutoIt. Jeder Datensatz wird als String angenommen wenn man davor ihn nicht explizit in einen anderen Typen konvertiert.

Das wird sich in Zukunft vermutlich auch nicht ändern (optional fände ich das schon richtig nice), weil das die Einfachheit der Sprache raubt. Die ist ja eigentlich auch nicht zum Hacken gedacht.