Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 03:15

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

Advertisement



Memory Pointer prüfen.

Discussion on Memory Pointer prüfen. within the C/C++ forum part of the Coders Den category.

Closed Thread
 
Old   #1
 
elite*gold: 0
Join Date: Jan 2012
Posts: 179
Received Thanks: 348
Memory Pointer prüfen.

Ich habe ein Problem, und hoffe ihr könnt mir helfen.

Ich habe in einer While schleife, ein paar funktionen, welche nur unter der bedingung funktionieren, dass der spieler in einem spiel ist.

Und dazu muss ich in der While schleife, angeben, dass der Pointer, valide ist.

Allerdings kommt bei der überprüfung ein crash, wenn der pointer nicht valide ist.

Hier das stück source.

Code:
while((*(DWORD*) (*(DWORD*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2)+ Off3)+ Off4)+ Xoff) > 4000)
Hier will ich eben testen, ob der pointer eine Addresse hat, die größer ist als 4000
Crack-7 is offline  
Old 02/01/2012, 01:37   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
beim dereferenzieren ist anscheinend einer der pointer ungültig, dadurch kommt es zu einer access violation.
wirst du einzeln dereferenzieren müssen und jeweils schauen ob jeder einzelne gültig ist.
Dr. Coxxy is offline  
Thanks
1 User
Old 02/01/2012, 03:02   #3
 
elite*gold: 0
Join Date: Jan 2012
Posts: 179
Received Thanks: 348
Quote:
Originally Posted by Dr. Coxxy View Post
beim dereferenzieren ist anscheinend einer der pointer ungültig, dadurch kommt es zu einer access violation.
wirst du einzeln dereferenzieren müssen und jeweils schauen ob jeder einzelne gültig ist.
Naja so funktioniert es leider auch nicht.
Bekomme Crash.

Code:
			if((*(DWORD*)(TeleBase)+ Off1) != Off1)
			{
				if((*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2) != Off2)
				{
					if((*(DWORD*)(*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2)+ Off3) != Off3)
					{
						if((*(DWORD*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2)+ Off3)+ Off4) != Off4)
						{
							if((*(DWORD*) (*(DWORD*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2)+ Off3)+ Off4)+ Xoff)!= Xoff)
							{
							      MessageBox(0,"Du bist ingame!","",0);
							}
						}
					}
				}
			}
Edit: Hab jetzt nen Walkaround gefunden ^^
Aber vielleicht hat jemand trotzdem lust daraus eine funktion zu machen :O
Also eine funktion zum testen, ob ein Pointer valide ist.
Crack-7 is offline  
Old 02/01/2012, 09:01   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
1. Das ist kein Workaround, sondern genau das, was Coxy sagte
2. Du prüfst ziemlich schlecht/unsicher. Das fliegt dir trotzdem auch mal um die Ohren
3. Es sieht immer noch schlimm aus
4. IsBadReadPtr
MrSm!th is offline  
Old 02/01/2012, 12:07   #5
 
elite*gold: 0
Join Date: Jan 2012
Posts: 179
Received Thanks: 348
Quote:
Originally Posted by MrSm!th View Post
1. Das ist kein Workaround, sondern genau das, was Coxy sagte
2. Du prüfst ziemlich schlecht/unsicher. Das fliegt dir trotzdem auch mal um die Ohren
3. Es sieht immer noch schlimm aus
4. IsBadReadPtr
1. Ich meinte eigendlich etwas anderes. Ich habe einen anderen weg gefunden, keinen crash zu bekommen, und die Playercoordinaten ohne crash zu beschreiben.
2. Inwiefern schlecht/unsicher? Und was fliegt mir wann um die Ohren? o.o
3. Ich finde es schön :3 Hat die Form einer Pyramide ^^
4. Schau ich mir mal an! Danke

EDIT: Freund sagte ich soll von IsBadReadPtr lieber die Finger lassen :O
Naja mein Workaround sieht folgendermassen aus.

Code:
while((*(DWORD*)(*(DWORD*)(*(DWORD*)(*(DWORD*)(TeleBase)+ Off1)+ Off2)+ Off3)+ Off4) == Off4)
		{
			Sleep(100);
		}
		pOwnPosition = reinterpret_cast<PlayerPosition*>(GetPlayerAddress(-1));
Dann funktioniert alles einwandfrei.
Denn das Problem war, dass pOwnPosition beschrieben wurde, obwohl man in diesem moment noch keine gültigen Coordinaten vorhanden waren.
Und danach gabs natürlich nen Crash, wenn versucht wird diese Coordinaten zu verändern-
Sprich:
Er setzt jetzt erst die Position, wenn es da auch was zu holen gibt.

Naja es klappt, und denke kann Closed werden.
Wer jedoch einen Tipp hat oder so, kann mir gerne eine PN senden.
Crack-7 is offline  
Old 02/01/2012, 17:13   #6
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
-> 2. ein ungültiger pointer muss nicht unbedingt (ist auch unwahrscheinlich) == 0 sein.
Dr. Coxxy is offline  
Old 02/02/2012, 00:12   #7


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
2. Weil du einfach nur prüfst, ob der Pointer gleich dem Offset ist (sprich der Wert an der Adresse 0). Und das auch nur für den letzten. Was ist, wenn schon bei Offset 2 der Pointer ungültig wird? Das Programm wird dir dann um die Ohren fliegen.
Auch bei deinem Workaround.
3. Es ist hässlich und ein scheiß Stil.
4. Is mir egal, was dein Freund dir sagt. Die Funktion erfüllt schonmal ihren Zweck. 100%ige Sicherheit bietet sie aber nicht (dennoch mehr als dein Code). Um ganz sicher zu gehen kannst du nur das ganze in einen try-catch Block stecken und eventuelle Exceptions abfangen und entsprechend behandeln.
MrSm!th is offline  
Old 02/02/2012, 02:40   #8
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
4.:
Dr. Coxxy is offline  
Thanks
1 User
Old 02/02/2012, 19:27   #9


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
100%ige Sicherheit bietet sie aber nicht (dennoch mehr als dein Code).


Es ist völlig legitim, die Funktion zu callen, solange man sich nicht nur auf sie verlässt.

Die Lösung, die da steht, ist übrigens absolut bescheuert.
Wer welche Exception fängt und wer sie weitergibt und wann ein Programm crasht sind Designentscheidungen, man sagt nicht prinzipiell: So, meiner Funktion wurde ein ungültiger Pointer übergeben, ich arbeite trotzdem mal damit und crashe einfach. Sowas wäre zb. in Libs schwachsinnig; man kann nicht davon ausgehen, dass der Nutzer valide Daten übergibt, man muss immer mit dem DAU rechnen. Für eigene Programme mag das eventuell noch praktikabel sein, aber auch nur zu Debug Zwecken, damit man direkt sieht, wenn man selbst irgendwo einen Fehler gemacht hat.

Wie auch immer, für einen Hack ist das ein NoGo.
Die Koordinatenpointer sind relativ oft ungültig, ich weiß das. Wenn man da jedes mal das Game crashen lässt, hast du die längste Zeit Downloadzahlen größer Null gehabt.
Ob man die Exceptions nun mit IsBadReadPtr abfängt oder selbst einen Exception Handler setzt, ist doch egal.
Jedenfalls SOLLEN sie abgefangen werden, damit es eben NICHT crasht.

Der gesamte Artikel lässt sich nicht auf Hacks anwenden.

Quote:
On the other hand, it might point to truly invalid memory. If you use IsBadWritePtr to "validate" your pointers before writing to them, then in the case where it happens to point to memory that is valid, you end up corrupting memory (since the pointer is "valid" and you therefore decide to write to it). And in the case where it happens to point to an invalid address, you return an error code. In both cases, the program keeps on running, and then that memory corruption manifests itself as an "impossible" crash two hours later.
Das würde auch passieren, wenn man sie gar nicht prüfen würde.
MrSm!th is offline  
Thanks
1 User
Old 02/06/2012, 20:58   #10
 
elite*gold: 0
Join Date: Jan 2012
Posts: 179
Received Thanks: 348
Smith ich glaube du hast nicht ganz verstanden worum es geht.

Also ich muss die Addressen der jeweiligen Positionen (x,y,z) speichern, und zwar sobald man einem room joint. (das prüfe ich mit einer bool addy)

So.

Wenn man in der Lobby ist, sind die Positionen valide, das ist klar.
Aber sollte die position beschrieben werden, während man im ladebildschirm ist, wird eine falsche addresse beschrieben beim porten, und man crasht.

Die x,y,z addy wird nur 1malig geholt, wenn man einem raum joint.
Und nicht Permanent (wäre schwachsinn).

Und meine Methode reicht da aus, dar sich im ladebildschirm etc. nur der letzte offset "zerstört" sag ich mal.
Crack-7 is offline  
Old 02/07/2012, 21:14   #11


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Smith ich glaube du hast nicht ganz verstanden worum es geht.
Doch.

Quote:
Also ich muss die Addressen der jeweiligen Positionen (x,y,z) speichern, und zwar sobald man einem room joint. (das prüfe ich mit einer bool addy)
Das Prinzip habe ich quasi erfunden.

Quote:
Wenn man in der Lobby ist, sind die Positionen valide, das ist klar.
Nein.

Quote:
Aber sollte die position beschrieben werden, während man im ladebildschirm ist, wird eine falsche addresse beschrieben beim porten, und man crasht.
Exakt.
Normalerweise portet man auch nicht sofort, sondern auf Befehl des Users

Wie gesagt: Exceptions! Schonmal von gehört?

Quote:
Die x,y,z addy wird nur 1malig geholt, wenn man einem raum joint.
Und nicht Permanent (wäre schwachsinn).
Nicht zwingend.

Quote:
Und meine Methode reicht da aus, dar sich im ladebildschirm etc. nur der letzte offset "zerstört" sag ich mal.
Falsch.
Aber mach was du willst, wenn du keinen guten C++ Stil praktizieren und Exceptions nutzen willst, sondern lieber deinen schlechten Workaround nutzt, ist das deine Sache.

Wenn du ohnehin deine eigenen Ideen bevorzugst, kann ich hier ja dicht machen

#closed
MrSm!th is offline  
Thanks
1 User
Closed Thread


Similar Threads Similar Threads
memory pointer
09/10/2012 - General Gaming Discussion - 5 Replies
hi, i was wondering if any1 got the latest memory pointer for hero online schlatterbot becuz i had a few friends who were familiar with cheat engine and they still can't figure out the code for it. any help would be great thank you
C# Memory Pointer
08/28/2011 - .NET Languages - 0 Replies
Hallo, Wollte einmal fragen ob man Memory Pointer in C# genauso wie In AutoIt verwendet also damit meine ich, Mit BaseAdresse Memory lesen und dann die Offsets hinzufügen. Wäre dankbar für eine antwort oder wenn es gehen würde ein Beispiel. Regards .Haru*
C++ Pointer Memory
12/24/2010 - C/C++ - 5 Replies
Hallo zusammen, ich bin aktuell dabei meine ganzen autoit botfunctions in c++ umzusetzen. aktuell habe ich ein problem mit der memory. das auslesen und schreiben geht generell schon. Beispielaufruf m_objFenster.MemoryRead(adr_death, sizeof(int)); Funktion
[VB.NET] Need help - memory reading from pointer
09/03/2010 - .NET Languages - 2 Replies
Hi, i'm kinda beginner in memory editing, the only experience i got is vb6 and vb.net - and basic CE skills. However i could get the pointer and the offset for a memory address, it works, tested. Next step is the reading of this value with a vb.net application. I have been googleing for 2 days, got some codes, wrote some by myself, but none of them seems to work. Could anyone help me a bit? Thank you, Regards
Memory Read + Pointer
10/14/2009 - AutoIt - 6 Replies
Mit meinem derzeitigen SourceCode kann ich nur die dynamische Adressen auslesen... http://img243.imageshack.us/img243/7495/ce1.jpg -> http://img243.imageshack.us/img243/3381/45455181.j pg Wenn ich aber versuchen den Pointer auszulesen http://img517.imageshack.us/img517/2683/13945157.j pg(Pointer + Offset) kommt ein völlig anderes Ergebniss raus... Kann mir jemand weiterhelfen? ;)



All times are GMT +2. The time now is 03:15.


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.