1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Autoit Read Memory geht nicht

Dieses Thema im Forum "Support & Discussion" wurde erstellt von DuSchlampe, 31. Juli 2018.

  1. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo, ich wollte für Assetto Corsa ein kleines Script machen welches die Fahrzeugposition abfragt und somit auch die Runden zählt bzw. dazu noch kers drückt, eine Alternative wäre Intelliboost, welches die Runden nicht zählt und bei mir zuviel Performance zieht, jetzt habe ich ein Script, welches ein Error mit sich bringt.

    Zudem hätte ich noch eine Frage, kann man das Script erst dann aktivieren, wenn ich eine bestimmte Taste gedrückt halte ?

    Code (AutoIt):
     
    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()
    MsgBox(0,"", "Value: " = $Value)

    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticofsset = 0x01559C08
       Global $hOpen, $sRead
       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x70
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0xA0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x20
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x1B0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x40
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x10
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x368
       $sValue = _Memoryread($sRead, $hOpen, 'Float')

    _MemoryClose($hOpen)
    Return $sValue
    EndFunc
     



    [​IMG]

     
    Zuletzt von einem Moderator bearbeitet: 1. August 2018
  2. Best Answer:
    Post #12 by krusty, 1. August 2018 (3 points)
    Alternative Answers:
  3. Ingolf

    Ingolf Member Ehrenmitglied

    Registriert seit:
    2. Juli 2017
    Beiträge:
    50
    Zustimmungen:
    23
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Hamburg
    wie wäre es mit "HotKeySet" ? kannst das ganze in eine Funktion packen die jedesmal wenn du die tast drückst ausgeführt wird.

    Zu deiner Fehlermeldung. Öffne einmal die NomadMemory.au3 und suche nach der Funktion "_MemoryPointerRead".
    Diese scheint nicht zu existieren. Zumindest in der nomadmemory.au3 die ich runtergeladen habe.
     
    krusty und DuSchlampe gefällt das.
  4. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    kannst du mir dann eine schicken mit der dies geht, zudem hätte ich eine andere Frage wie kann ich dort jetzt verschiedene Werte eintragen, damit das Script mehrfach in einer Runde angeht ?
    Also Bei Value 0.1 dann bei 0.2 zb. dann bei 0.3 usw.

    _MemoryPointerRead kann nicht gefunden werden.
    Mit Hotkeyset ist jetzt iwie auch einleuchtend :)
     
  5. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hier mein Aktuelles Script welches ich versuche zum laufen zu bekommen:

    Code (AutoIt):

    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()
    MsgBox(0,"", "Value: " = $Value)

    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticofsset = 0x01559C08
       Global $hOpen, $sRead
       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x70
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0xA0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x20
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x1B0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x40
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x10
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x368
       $sValue = _Memoryread($sRead, $hOpen, 'Float')

    _MemoryClose($hOpen)
    Return $sValue
    EndFunc

     
    [​IMG]
    [​IMG]


    Ich habe jetzt eine andere NomadMemory.au3 wo auch _MemoryPointerRead enthalten ist.
     
    Zuletzt von einem Moderator bearbeitet: 1. August 2018
  6. Ingolf

    Ingolf Member Ehrenmitglied

    Registriert seit:
    2. Juli 2017
    Beiträge:
    50
    Zustimmungen:
    23
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Hamburg
    sorry bin leider nicht so bewandert was arbeiten mit dem speicher zutun hat :(

    ich kann dir nur sagen das du derzeit versuchst zeichenketten zu addieren was ja irgendwie nicht geht.
    ich kann dir leider auch nicht sagen in was du es umwandeln müsstest also "$iBase = 0x7FF649DB0000, $iStaticofsset = 0x01559C08" damit du sie addieren kannst so wie du es möchtest.
    Es kann sein das es extra für sowas nee Funktion gibt um halt adressen zusammen zu rechnen
     
  7. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ich habe folgendes Video befolgt weshalb ich auch nicht verstehe wieso das nicht geht.
     
  8. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    9
    Punkte für Erfolge:
    3
    Die zwei Variablen sind unterschiedlich,
    du Deklarierst
    iStaticofsset

    Aber willst
    iStaticoffset
    nutzen

    Da ist nen s in der deklaration zuviel
    iStaticofsset

    edit:
    Einfach auf die Fehlermeldung achten, die zeigt dir genau an wo der Fehler ist, nämlich nach $iBase + " also bei $iStaticoffset.

    Der Grund: "Varialbe used without being declared" = Die Variable wird benutzt bevor sie "definiert" wurde
     
    krusty und DuSchlampe gefällt das.
  9. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Dummer Fehler ... leider nicht die Lösung :( FUUUUUCK ich suche jetzt seit tagen eine Lösung für ein eigentlich so leichtes Problem ich verzweifel so ein dreck.

    Code (AutoIt):


    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()
    MsgBox(0,"", "Value: " = $Value)

    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticofset = 0x01559C08
       Global $hOpen, $sRead
       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x70
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0xA0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x20
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x1B0
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x40
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x10
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x368
       $sValue = _Memoryread($sRead, $hOpen, 'Float')

    _MemoryClose($hOpen)
    Return $sValue
    EndFunc


     

    upload_2018-7-31_21-28-0.png
     
    Zuletzt von einem Moderator bearbeitet: 1. August 2018
  10. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Kann mir jemand weiterhelfen ?
     
  11. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    9
    Punkte für Erfolge:
    3
    Die Variablen sind immer noch unterschiedlich benannt ..
    Ließ die Fehlermeldung! Die Var. "$iStaticoffset" ist nicht definiert / deklariert.
     
  12. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Besten dank und ein Großes Sorry für mein mega fail, wie kann ich das jetzt machen wenn wert 0.025 ist, dann Taste P Für 2 sec halten ?

    zudem wird immer 1692 ausgegeben


    Code (AutoIt):

    #cs ----------------------------------------------------------------------------

     AutoIt Version: 3.3.14.5
     Author:         myName

     Script Function:
        Template AutoIt script.

    #ce
    ----------------------------------------------------------------------------


    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()

    MsgBox(0,"", $sRead)
    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticoffset = 0x01559C08
       Global $hOpen, $sRead
       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x68
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x118
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x1A8
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x1D8
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x188
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x18
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x20
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x138
       $sRead = _Memoryread($iBase + $iStaticoffset, $hOpen, 'Float') + 0x69C
       $sValue = _Memoryread($sRead, $hOpen, 'Float')

    _MemoryClose($hOpen)
    Return $sValue
    EndFunc
     
     
    Zuletzt von einem Moderator bearbeitet: 1. August 2018
  13. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    43
    Zustimmungen:
    26
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Best Answer
    Guten Abend mein Lieber,

    ich habe deinen Thread mal verschoben und deinen Code in tags gesetzt.

    Wenn du einen Zeiger/Pointer auslesen möchtest, solltest du die Werte nicht als Float auslesen. Float verwendet man, um Gleitkommazahlen auszulesen. Du möchtest jedoch ganzzahlige Offsets auslesen.
    Verwende "dword" anstatt "float".

    Zum Auslesen von Multilevel-Pointern gibt es hier eine modifizierte Version der NomadMemory.au3:
    https://www.autoitscript.com/forum/topic/93855-memory-reading/?do=findComment&comment=674192

    Vlt hast du die ja bereits. Darin gibt es die Funktion _MemoryPointerRead, welche du wie folgt verwenden kannst:

    Code (AutoIt):

    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticoffset = 0x01559C08
       Global $hOpen

       Dim $Offset[10]
       $Offset[0] = 0
       $Offset[1] = Dec("0x68")
       $Offset[2] = Dec("0x118")
       $Offset[3] = Dec("0x1A8")
       $Offset[4] = Dec("0x1D8")
       $Offset[5] = Dec("0x188")
       $Offset[6] = Dec("0x18")
       $Offset[7] = Dec("0x20")
       $Offset[8] = Dec("0x138")
       $Offset[9] = Dec("0x69C")

       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sValue = _MemoryPointerRead($iBase + $iStaticoffset, $hOpen, $Offset, 'Float')

       _MemoryClose($hOpen)
       Return $sValue
    EndFunc   ;==>_Pointer
     

    Ich habe leider sehr lange nicht mehr in Autoit programmiert.
    Bekommst du mit der Funktion einen besseren Output?

    Liebe Grüße, Krusty
     
    DuSchlampe gefällt das.
  14. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Ich möchte mich an alle bedanken die mir helfen, und ich schäme mich auch teilweise für blöde fragen, bzw. wo ich weiß, dass ihr sie easy beantworten könnt und dies absolute anfänger Fehler sind, bei mir ist es so, dass ich das Script jetzt abgewandelt habe, allerdings ist jetzt mein Problem, wenn ich eine MSG hinzufüge, dann bekomme ich immer einen Fehler, ich zeig euch erstmal wie ich diese hinzufüge, ich denke, dass dort der riesen Fehler sitzt....

    Ums kurz zu fassen, welchen Wert muss ich nehmen, damit ich dies in einer MsgBox anzeigen lassen kann, bzw., damit das Progamm bei mehreren Bestimmten werten etwas ausführt, und dies permanent wiederholt wird ?


    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()





    Func _Pointer()
    Global $iBase = 0x7FF649DB0000, $iStaticoffset = 0x01559C08
    Global $hOpen

    Dim $Offset[10]
    $Offset[0] = 0
    $Offset[1] = Dec("0x68")
    $Offset[2] = Dec("0x118")
    $Offset[3] = Dec("0x1A8")
    $Offset[4] = Dec("0x1D8")
    $Offset[5] = Dec("0x188")
    $Offset[6] = Dec("0x18")
    $Offset[7] = Dec("0x20")
    $Offset[8] = Dec("0x138")
    $Offset[9] = Dec("0x69C")

    $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
    $sValue = _MemoryPointerRead($iBase + $iStaticoffset, $hOpen, $Offset, 'Float')

    _MemoryClose($hOpen)
    MsgBox(0,"", $sValue)
    Return $sValue
    EndFunc ;==>_Pointer
     
  15. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    43
    Zustimmungen:
    26
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ort:
    Wadiya
    Was für einen Fehler bekommst du denn? Ich kann das Programm fehlerfrei ausführen (davon abgesehen, dass ich kein "acs.exe" habe)
    Hast du den Zeiger mittelt Cheat Engine gesucht?
    Hast du das Spiel mal neugestartet und geschaut, ob der Zeiger in Cheat Engine noch immer funktioniert?

    Bitte verwende Code-Tags, wenn du Code im Forum postetst: https://www.codebot.de/help/syntaxhighlighter/

    einfach wie folgt:
    [code = Autoit] hier den Code einfügen [/ code] (ohne Leertasten)
     
    DuSchlampe gefällt das.
  16. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1


    Code (AutoIt):

    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()


    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticoffset = 0x01559C08
       Global $hOpen

       Dim $Offset[10]
       $Offset[0] = 0
       $Offset[1] = Dec("0x69C")
       $Offset[2] = Dec("0x138")
       $Offset[3] = Dec("0x20")
       $Offset[4] = Dec("0x18")
       $Offset[5] = Dec("0x188")
       $Offset[6] = Dec("0x1D8")
       $Offset[7] = Dec("0x1A8")
       $Offset[8] = Dec("0x118")
       $Offset[9] = Dec("0x68")

       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sValue = _MemoryPointerRead($iBase + $iStaticoffset, $hOpen, $Offset, 'Float')

       _MemoryClose($hOpen)
    MsgBox(0,"", $sValue)
       Return $sValue
    EndFunc   ;==>_Pointer









    Ich bekomme nichts ausgegeben, zudem weiß ich nicht ob ich zu 100% die Werte Richtig herum eingetragen hab, weil ich in einem Video gehört hab, dass ich die Offsets anders herum hinenschreiben soll als in cheat engine, um dieses Problem auszuschließen habe ich dies natürlich extra auch umgekehrt versucht, leider bislang ohne Erfolg.

    Ansonsten wäre ich auch im Teamspeak anzutreffen, German-F1-Racers.FormelGP.win

     
    Zuletzt von einem Moderator bearbeitet: 2. August 2018
  17. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Push push
     
  18. gigagames

    gigagames New Member

    Registriert seit:
    2. Juli 2017
    Beiträge:
    22
    Zustimmungen:
    9
    Punkte für Erfolge:
    3
    1. TIPP: Vor Mem Open ne abfrage einfügen ob der Procces überhaupt läuft (Damit das nicht zu fehlern führen kann)
    2. TIPP: Es gibt "_MemoryGetBaseAddress" so brauchst du diese nicht manuell im Code einzutragen

    3. Meine google suche sagt mir, das es sich um ein ARRAY handelt somit müsstest du $sValue[1] ausgeben lassen
     
  19. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Code (Text):

    #RequireAdmin
    #include <NomadMemory.au3>

    $Value = _Pointer()





    Func _Pointer()
       Global $iBase = 0x7FF649DB0000, $iStaticoffset = 0x01559C08
       Global $hOpen

       Dim $Offset[10]
       $Offset[0] = 0
       $Offset[1] = Dec("0x68")
       $Offset[2] = Dec("0x118")
       $Offset[3] = Dec("0x1A8")
       $Offset[4] = Dec("0x1D8")
       $Offset[5] = Dec("0x188")
       $Offset[6] = Dec("0x18")
       $Offset[7] = Dec("0x20")
       $Offset[8] = Dec("0x138")
       $Offset[9] = Dec("0x69C")

       $hOpen = _MemoryOpen(ProcessExists("acs.exe"))
       $sValue = _MemoryPointerRead($iBase + $iStaticoffset, $hOpen, $Offset, 'dword')

       _MemoryClose($hOpen)
    MsgBox(0,"", $sValue[1])
       Return $sValue
    EndFunc   ;==>_Pointer

     

    so wird noch immer ein Fehler ausgegeben
     
  20. krusty

    krusty Moderator Mitarbeiter Moderator

    Registriert seit:
    1. Juli 2017
    Beiträge:
    43
    Zustimmungen:
    26
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ort:
    Wadiya
    #2 Best Answer
    Werde mich ab Freitag drum kümmern.

    EDIT: Also, das Problem war wohl, dass die NomadMemory.au3 nicht für 64 Bit Prozesse funktioniert hat. Das Skript muss zudemm als 64 Bit Anwendung ausgeführt werden.
    Wenn man Zeiger ausliest, ist darauf zu achten, dass man bei einem 64 Bit Prozess 8 Byte große Adressen hat. Als Datatype haben wir deshalb "int_ptr" verwendet, welcher 8 Byte groß ist.

    Zudem sind wir auf KryMemory.au3 umgestiegen: https://www.autoitscript.com/forum/topic/147423-krymemory-udf/
     
    Zuletzt bearbeitet: 11. August 2018
  21. DuSchlampe

    DuSchlampe New Member

    Registriert seit:
    31. Juli 2018
    Beiträge:
    12
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Das Problem war, dass ich dachte das Spiel sei 32 bit, mit der KryMemory.au3 läuft alles Prima
    Code (Text):
    #AutoIt3Wrapper_UseX64=n
    #RequireAdmin

    #include <KryMemory.au3>


    While 1
       $Value = _LapDisctance()
       If Round($Value,3) = 0.1 Then

              Send("{b Down}")
             Sleep(3000) ; 3 seconds
             Send("{b Up}")


       EndIf
       If Round($Value,3) = 0.340 Then

              Send("{b Down}")
             Sleep(3000) ; 3 seconds
             Send("{b Up}")

       EndIf
    WEnd



    Func _LapDisctance()
          $proc = _Process_Open("acs.exe")
          $iBase = _Process_GetBaseAddress($proc)

          $value = _Process_ReadMemory($proc,$iBase + 0x01559C08,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x68 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x118 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x1A8 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x1D8 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x188 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x18 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x20 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x138 ,"int_ptr")
          $value = _Process_ReadMemory($proc,$value + 0x69C,"float")



    ;MsgBox(0,"",Round ($value,2))


          _Process_close($proc)
          Return $value
    EndFunc
     
    Zuletzt bearbeitet: 13. August 2018

Diese Seite empfehlen

Die Seite wird geladen...