Das sollte schon möglich sein, in der Parameterliste der UDF-Funktionen kommt bei einigen ja $type oder ähnliches vor. Versuch dort einfach mal den Typ anzugeben, z.B. float, double, dword, ...
Genau das macht doch meine UDF. Bei der NomadMemory.au3/Pointer.au3 ist der "Typ" Parameter optional. Das führte häufig nur dazu, dass Anfänger nicht wussten, weshalb ein "float" Wert nicht korrekt ausgegeben wurde. "4 Bytes" hat ja auch immer funktioniert. Das ist eines der Gründe, weshalb ich den Parameter nicht optional gemacht habe, eine Angabe des Typs muss immer erfolgen.
Hier mal eine kleine Tabelle:
Cheat Engine
AutoIt
Byte
byte
2 Bytes
WORD
4 Bytes
DWORD
8 Bytes
QWORD
Float
float
Double
double
Array of bytes
byte[$size]
Text
char[$length] (ANSI), WCHAR[$length] (Unicode)
Für das Lesen oder Schreiben eines Textes empfehle ich dir Funktionen
_KDMemory_ReadProcessString()
_KDMemory_WriteProcessString()
Das hat klare Vorteile gegenüber der Methode ein Char-Array als Typ zu verwenden.
Falls das aber nicht gemeint ist, sondern die Frage, ob man den Typ einer Adresse automatisch erkennen kann: Nein, das ist nicht möglich. Du musst diesen selbst angeben.
OK, danke der letzte Satz hat meine Frage beantwortet.
Quote:
Falls das aber nicht gemeint ist, sondern die Frage, ob man den Typ einer Adresse automatisch erkennen kann: Nein, das ist nicht möglich. Du musst diesen selbst angeben.
Wäre es nicht möglich alle durchzuprobieren und bei korrekter Ausgabe den Typ festzulegen? Das ist sicherlich nicht effizient oder schnell aber würde doch sicherlich funktionieren oder?
Wäre es nicht möglich alle durchzuprobieren und bei korrekter Ausgabe den Typ festzulegen? Das ist sicherlich nicht effizient oder schnell aber würde doch sicherlich funktionieren oder?
Nö, überhaupt nicht.
Das Ganze funktioniert nur bei folgenden Szenarien:
1. Der Wert steht zufällig an der allerletzten Speicherzelle im Ram.
Dann würde es bei einem Wert, der größer als der wirklich genutzte Speicher ist einen Fehler geben.
2. Nur dieser eine Wert hat Read-Rechte und alle Werte in der Umgebung nicht. Dann könnte man testen bei welchem größten Datentyp das Lesen klappt.
Aber wieso geht das sonst nicht?
Die Antwort ist easy, stellen wir uns vor wir haben folgenden Speicher (jede Zeile entsprich genau einem halben BYTE):
Halbes Byte #
Wert
Binär
1
1
0001
2
2
0010
3
3
0011
4
4
0100
Der Grund wieso man das jetzt nicht erkennen kann ist folgender:
Wenn wir statt einem short (=2 Byte) ein char (=1 Byte) auslesen lassen, dann kriegen wir folgende Zahl zurück:
PHP Code:
0001 0010 = 18
Lesen wir jetzt aber 2 Byte aus sieht unsere Zahl so aus:
PHP Code:
0001 0010 0011 0100 = 4660
Lesen wir hingegen nur ein halbes Byte aus sieht unsere Zahl so aus:
PHP Code:
0001 = 1
Alle 3 Zahlen sind existierende Zahlen und wenn das Programm nicht weiß, wie groß diese Zahl ist, dann ist jeder Datentyp eine mögliche echte Zahl, auch der halbbyte Datentyp, auch wenn der so gar nicht existiert.
Vondaher ist es nicht möglich, ohne Vorwissen, den Datentyp komplett automatisch bestimmen zu lassen. Zumindest nicht ohne das Programm o.ä. zusätzlich analysieren zu lassen. Alleine durch die Adresse/den Pointer ist der Datentyp nicht festgelegt.
Shadow992 hat es ganz gut erklärt, hat allerdings einen (Leichtsinns) Fehler gemacht. Ein Byte besteht aus 8 Bit, nicht aus 4.
Folgendes ist deshalb ein Beispiel für 2 Byte und nicht für 4 Byte.
Quote:
Originally Posted by Shadow992
Lesen wir jetzt aber 4 Byte aus sieht unsere Zahl so aus:
[Memory Read] Monster HP auslesen 04/02/2012 - AutoIt - 7 Replies Ich versuche im Moment herauszufinden, wie ich die HP eines Monsters auslesen kann.
Wie man hier an dem Bild sehen kann, steht leider keine HP Zahl im Balken, weswegen ich mit Cheat engine per unknown initial value versucht habe, den Wert auszulesen:
http://www9.picfront.org/picture/K3rbobWJdKL/thb/ HP.jpg
Da dies aber nicht funktioniert hat, bzw. ich nur einen Wert rausbekomme, der sich nach dem Tot des Monsters in eine irrsinnige Zahl ändert, frage ich hier um Rat.
Hat vielleicht einer...
C++ String aus Memory auslesen 05/08/2010 - C/C++ - 1 Replies Hallo zusammen ;)
Ich probiere mich derzeit ein wenig mit dem auslesen des Memory in C++.
Hab mir da auch schon ne DLL gebastelt und injected... usw.
Nun habe ich ein Problem:
Ich möchte gerne den Namen meines Charakters auslesen.
Mit Cheatengine klappt das ja wunderbar und wird auch richtig angezeigt, nur wenn ich mittels der DLL versuche aus der Addresse meinen Namen auszulesen bekomm ich immer nur 1 Zeichen und das stimmt nicht einmal mit dem 1. Buchstaben meines Namens überein.
Hier...
PostMessage und Memory auslesen in C++ 12/19/2009 - C/C++ - 13 Replies Heyho,
ich versuche im moment mit DevC++ ein Programm zu programmieren, was mir die Flaggenanzahl von Minesweeper ausgibt. Allerdings kriege ich immer den error, dass es der falsche Datentyp sei.
ich hab auf dem pc gerad kein DevC++, weshalb ich das Problem net genauer beschreiben kann.
int *pointer;
pointer = 0xF745879 //irgendeine Speicheradresse
cout << *pointer << endl;
Irgendwie so war der code^^
€dit: Die Speicheradresse war ne normale integer-Adresse (also 4-Byte).
Aber, wie...
Fragen Zur Memory!!!(Auslesen von Spawn/Memory) 12/31/2008 - Guild Wars - 3 Replies hey leute,
ich wollte mal einen bot schreiben und nun bin ich ganz verwirrt.
könnte mir jmd bitte schritt für schritt erklären wie das mit Memory auslesen, benutzen und der Spawnpointer funktioniert.
Ich wär sehr dankbar wenn jmd kontakt mit mir aufnehmen würde...
und sobald der bot fertig ist bekommt der ihn natürlicherweise umsonst:D
ICQ: 481799773
oder hier im forum