Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 20:48

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Typ einer Adresse auslesen (DWORD, CHAR, etc)

Discussion on Typ einer Adresse auslesen (DWORD, CHAR, etc) within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
Croco™'s Avatar
 
elite*gold: 235
Join Date: Jan 2012
Posts: 920
Received Thanks: 377
Typ einer Adresse auslesen (DWORD, CHAR, etc)

Hi,
ist es möglich den Typ (Char, DWORD, etc) einer Adresse auszulesen?
Ich benutze zum Auslesen die KDMemory UDF.
Croco™ is offline  
Old 11/28/2013, 16:46   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
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, ...
alpines is offline  
Old 11/28/2013, 17:22   #3
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
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 EngineAutoIt
Bytebyte
2 BytesWORD
4 BytesDWORD
8 BytesQWORD
Floatfloat
Doubledouble
Array of bytesbyte[$size]
Textchar[$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.

Beispiele:
Code:
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "byte")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "WORD")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "DWORD")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "QWORD")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "float")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "double")
$memoryData = _KDMemory_ReadProcessMemory($handles, $address, "byte[4]")
$memoryData = _KDMemory_ReadProcessString($handles, $address)
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.
KDeluxe is offline  
Thanks
3 Users
Old 11/28/2013, 18:41   #4
 
Croco™'s Avatar
 
elite*gold: 235
Join Date: Jan 2012
Posts: 920
Received Thanks: 377
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.
Croco™ is offline  
Old 11/28/2013, 19:44   #5
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
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?
alpines is offline  
Old 11/28/2013, 20:00   #6
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by alpines View Post
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 #WertBinär
110001
220010
330011
440100

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 
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 is offline  
Old 11/28/2013, 20:01   #7
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Gut zu wissen, dann muss man also die Werte selber anschauen und bestimmen welcher Datentyp korrekt ist.
alpines is offline  
Old 11/29/2013, 00:20   #8
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
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 View Post
Lesen wir jetzt aber 4 Byte aus sieht unsere Zahl so aus:
PHP Code:
0001 0010 0011 0100 4660 
KDeluxe is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[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...
[VB|Memory] Array of Byte auslesen
11/01/2011 - .NET Languages - 0 Replies
....
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



All times are GMT +2. The time now is 20:48.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.