AutoIt Problem mit Memory...

10/27/2013 18:17 Aaron3569#1
Hey leute ich habe ein Problem mit der Memory Open funktion...
Hier ist das Script:


#include <NomadMemory.au3>
#include <Pointer.au3>
SetPrivilege("SeDebugPrivilege", 1)

$pid = WinGetProcess("METIN2")
$openmem = _MemoryOpen($pid)
$baseadress = _MemoryModuleGetBaseAddress($pid,"METIN2.exe")

$testoffset1 = "324"
$testoffset2 = "5B6"
$testoffset3 = "59DEE9AE"
Global $AOffset[3]
$AOffset[0] = 0
$AOffset[1] = Dec($testoffset1)
$AOffset[2] = Dec($testoffset2)
$Aaddress = "0x" & Hex($baseadress + Dec($testoffset3))



$Amemread = _MemoryPointerRead($Aaddress, $openmem, $AOffset, "byte[2]")
$Awert = _ReturnMemoryValue($Amemread[1])
$Awert = Dec($Awert)

Func _ReturnMemoryValue($sAdresse)
$sNewAdresse = ""
$sAdresse = StringTrimLeft($sAdresse, 2)
For $i = StringLen($sAdresse) - 1 To 0 Step -2
$sNewAdresse &= StringMid($sAdresse, $i, 2)
Next
Return $sNewAdresse
EndFunc

while 1
_MemoryPointerWrite($Aaddress, $openmem, $AOffset, "16556", "dword")
wend





Wisst ihr was falsch ist? hab folgende fehler meldung:

C:\Program Files (x86)\AutoIt3\Include\Pointer.au3 (40) : ==> Duplicate function name.:
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
10/27/2013 19:18 alpines#2
Die Funktion kommt in der NomadMemory.au3 und in der Pointer.au3 vor, lösch das
Code:
#include <NomadMemory.au3>
10/27/2013 20:43 berkay2578#3
Remove the Pointer.au3 import..
also, it's SetPrivilege("SetDebugPrivilege", 1)
10/27/2013 20:52 alpines#4
Actually thats partially wrong because Pointer.au3 contains the function _MemoryPointerRead and NomadMemory.au3 does not contain it.
It would be smarter delete the #include <NomadMemory.au3> than deleting the other UDF which contains the function which is not in the other UDF.
10/27/2013 23:02 KDeluxe#5
Quote:
Originally Posted by berkay2578 View Post
Remove the Pointer.au3 import..
also, it's SetPrivilege("SetDebugPrivilege", 1)
  1. He should remove the NomadMemory include instead of the Pointer.au3 include.
  2. It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ([Only registered and activated users can see links. Click Here To Register...]).


Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Code:
$offsets[3] = [0, 0x324, 0x5B6]
Selbiges gilt für Zeile 7 und 16.
Code:
$baseadress = _MemoryModuleGetBaseAddress($pid,"METIN2.exe")
$Aaddress = $baseadress + 0x59DEE9AE
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal [Only registered and activated users can see links. Click Here To Register...]. Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
10/28/2013 13:37 berkay2578#6
Quote:
Originally Posted by KDeluxe View Post
  1. He should remove the NomadMemory include instead of the Pointer.au3 include.
I don't have the Pointer.au3 by def. fellas. I'm just going to assume it's an external lib like the NomadMEM.
Quote:
Originally Posted by KDeluxe View Post
  1. It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ([Only registered and activated users can see links. Click Here To Register...])
oh ok.
Quote:
Originally Posted by KDeluxe View Post
Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Code:
$offsets[3] = [0, 0x324, 0x5B6]
Selbiges gilt für Zeile 7 und 16.
Code:
$baseadress = _MemoryModuleGetBaseAddress($pid,"METIN2.exe")
$Aaddress = $baseadress + 0x59DEE9AE
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal [Only registered and activated users can see links. Click Here To Register...]. Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
I just love how you called me a gentleman. There is a reason why you won't find a C&P source using your base.. it's because no one uses it :D

Quote:
Originally Posted by alpines View Post
Actually thats partially wrong because Pointer.au3 contains the function _MemoryPointerRead and NomadMemory.au3 does not contain it.
It would be smarter delete the #include <NomadMemory.au3> than deleting the other UDF which contains the function which is not in the other UDF.
it actually does :p

10/28/2013 16:23 alpines#7
NomadMemory.au3 doesn't have _MemoryPointerRead included because else Pointer.au3 wouldn't exist.
10/28/2013 17:06 Aaron3569#8
Quote:
Originally Posted by KDeluxe View Post
  1. He should remove the NomadMemory include instead of the Pointer.au3 include.
  2. It's 'SeDebugPrivilege' and not 'SetDebugPrivilege' ([Only registered and activated users can see links. Click Here To Register...]).


Jetzt noch was zum eigentlichen Thema. Wie alpines schon richtig gesagt hat musst du eigentlich nur die Zeile mit dem NomadMemory.au3 Include entfernen.
"SeDebugPrivilege" wird nicht benötigt. Dafür aber Adminrechte. Deshalb solltest du #RequireAdmin in deinem Script hinzufügen (am einfachsten in die 1. Zeile).
Zeile 10 bis 16 ist Blödsinn. Das hätte man zum einen in einer Zeile lösen können und zum anderen performanter. Du speicherst deine Offsets in einem String und lässt diesen in eine Dezimalzahl umrechnen. Das kostet Performance. Du kannst du Offsets einfach gleich als Hexadezimalzahl angeben, dann wird auch keine Rechenoperation gebraucht.
Code:
$offsets[3] = [0, 0x324, 0x5B6]
Selbiges gilt für Zeile 7 und 16.
Code:
$baseadress = _MemoryModuleGetBaseAddress($pid,"METIN2.exe")
$Aaddress = $baseadress + 0x59DEE9AE
Zeile 20 bis 31 sind komplett sinnlos. Angefangen dabei, dass du der Funktion _ReturnMemoryValue() nicht die Adresse sondern den Wert der Adresse übergibst. Hier gibt es nur lesenden Zugriff, da du mit dem resultierenden Wert ($Awert) nicht weiterarbeitest ist es aber wie schon geschrieben komplett sinnlos. Was die Funktion letzten Endes macht sieht auch unsinnig aus, aber darüber möchte ich nicht Urteilen.
Außerdem solltest du dich daran gewöhnen, dass die Funktionen auch einen Fehlercode zurückgeben. Diese Fehler solltest du auch behandeln. In deinem aktuellen Script gibt es für die Anzahl an Zeilen viele theoretischer Stellen, an der deine Anwendung einfach "abschmieren" kann.
Bei Metin2 wird die Verwendung der NomadMemory.au3/Pointer.au3 dir zwar nicht das Genick brechen, ich empfehle dir dennoch mal [Only registered and activated users can see links. Click Here To Register...]. Einer der netten Herren hier wird wahrscheinlich etwas "negatives" über meine UDF schreiben, lass dich davon aber nicht beirren. Du wirst außerdem nicht so viel für C&P finden. Deinem aktuellen Script nach zu urteilen war das nämlich bisher deine größte Aufgabe. Ich könnte dein Script aber entsprechend anpassen.
danke für die Antwort , könntest du mir eventuell zeigen, wie das ganze aussehen muss wenn ich es mache wie du es beschrieben hast? bin mir nicht sicher ob es richtig ist
10/28/2013 17:14 berkay2578#9
Quote:
Originally Posted by alpines View Post
NomadMemory.au3 doesn't have _MemoryPointerRead included because else Pointer.au3 wouldn't exist.
open the spoiler I posted.. or;
10/28/2013 17:25 alpines#10
Maybe you can modify it but it was first posted without Pointer functions otherwise Pointer.au3 wouldn't exist...
10/28/2013 17:45 berkay2578#11
lol, I didn't modify it :D just go to autoit forums & check the release thread, he updated it long ago..
10/28/2013 18:13 alpines#12
See? You also say that it was updated. The first UDF didn't contain that.