[C++]Adressen & Pointer!

12/22/2011 14:22 DreamStyler#1
Heyho meine Lieben! Ich hab ein gewisses Problem.

Ich weiß wie man bestimmten Adressen oder Werten Pointer zuweißt. Ein klassisches Beispiele wäre ja:

int var = 100;
int* PointerVar = &var;

Oder für Adressen casten:
DWORD* Pointer = (DWORD*)0xADRESSE;

Sowas halt. Ich hab aber ein anderes Problem, man kann es hier erkennen:

Ich habe die Adresse 0x18040000, die immer so vorhanden ist! (Das gut=) ).
Jetzt addiere ich halt den Offset 0x2C dazu, um eine neue Adresse zu erhalten. Nur dieses Mal ist die Adresse die Adresse vom Pointer selbst! Und dieser zeigt dann auf eine andere Adresse und immer so weiter. Meine Frage:

Wie setze ich das in C++ um? Wie weise ich einem Pointer seine Adresse zu? Geht das? Muss es anscheinend ja^^

Vielen Dank für eure Hilfen!

Fg DreamStyler
12/22/2011 15:01 jacky919#2
int* Base = reinterpret_cast<int*> 0xBLABLA
int* erste = reinterpret_cast<int*> *Base + Offset1
int* zweite = reinterpret_cast<int*> *erste + Offset2
...

Zu dem Wert der vorherigen adresse wird ein Offset addiert. Die Summe ist die nächste Addresse, ihrem Wert wird wiederum ein Offset zugefügt und so weiter
12/22/2011 19:26 DreamStyler#3
Quote:
Originally Posted by jacky919 View Post
int* Base = reinterpret_cast<int*> 0xBLABLA
int* erste = reinterpret_cast<int*> *Base + Offset1
int* zweite = reinterpret_cast<int*> *erste + Offset2
...

Zu dem Wert der vorherigen adresse wird ein Offset addiert. Die Summe ist die nächste Addresse, ihrem Wert wird wiederum ein Offset zugefügt und so weiter
Vielen Dank für deine Antwort! Aber das löst mein Problem nicht. Du weißt nem Pointer im Prinzip nen anderen zu und immer so weiter. Das kann ich auch, nur ich will die Speicheradresse, die der Pointer selber besitzt, variieren können. Ich weiß sonst nicht, wie ich auf das Ergebnis kommen soll. Die zweite Adresse ist ja nicht immer 27204A14.
12/22/2011 20:21 ms​#4
Quote:
Originally Posted by DreamStyler View Post
Wie setze ich das in C++ um? Wie weise ich einem Pointer seine Adresse zu? Geht das? Muss es anscheinend ja^^
Code:
#include <stdio.h>

int *i = (int *)&i;

int main(int argc, char *argv[])
{
    printf("i = %p\n*i = %x\n", (void *)i, *i);
}
12/22/2011 20:33 xNopex#5
Quote:
Wie setze ich das in C++ um?
Quote:
#include <stdio.h>

int *i = (int *)&i;

int main(int argc, char *argv[])
{
printf("i = %p\n*i = %x\n", (void *)i, *i);
}
Finde den Fehler.
12/22/2011 20:38 jacky919#6
Quote:
Originally Posted by DreamStyler View Post
Vielen Dank für deine Antwort! Aber das löst mein Problem nicht. Du weißt nem Pointer im Prinzip nen anderen zu und immer so weiter. Das kann ich auch, nur ich will die Speicheradresse, die der Pointer selber besitzt, variieren können. Ich weiß sonst nicht, wie ich auf das Ergebnis kommen soll. Die zweite Adresse ist ja nicht immer 27204A14.
Das * vor dem Pointer dereferenziert ihn. Dadurch steht da eigentlich der Wert der Addresse worauf der Pointer verweist.

@xNopex: Ja, das ist mal ein C++ wie es im Buche steht... xD
12/22/2011 20:53 ms​#7
Tut mir Leid, hab ganz vergessen dass C-Style in C++ strikt verboten ist.
12/22/2011 21:10 xNopex#8
Sry aber das hat mit C++ gar nichts mehr am Hut. Das ist reines C. Falscher Header, für Ausgaben gibts cout, falscher Cast... Das ist einfach kein C++.
12/22/2011 21:51 Dr. Coxxy#9
das ist leider nicht falsch mein lieber xNopex, sondern einfach nur C.
da c++ die meisten C befehle zulässt ist daran nichts aber auch rein garnichts "falsch".
höchstens schlechter stil, wenn man ansonsten c++ stil verwendet, aber wenn er hier C-style code postet nehme ich an, dass er ansonsten auch c-style bevorzugt, was schließlich nicht verboten ist.
12/22/2011 23:57 MoepMeep#10
Wenn C++-Code verlangt wird ist das falsch. :>
12/23/2011 14:15 ms​#11
Quote:
Originally Posted by DreamStyler View Post
Is ja schön und gut, dass du dich über andere lustig machen kannst, aber ich wäre eher an einer Lösung meines Problems interessiert :$. Langsam gehen mir die Ideen dazu aus.


Fg
Ich habe die Lösung bereits gepostet.
Veränder halt den Header, den Cast und mache die Ausgabe über nen Stream, wenn du unbedingt 100% C++ haben willst.
12/23/2011 14:52 MrSm!th#12
Quote:
Originally Posted by DreamStyler View Post
Vielen Dank für deine Antwort! Aber das löst mein Problem nicht. Du weißt nem Pointer im Prinzip nen anderen zu und immer so weiter. Das kann ich auch, nur ich will die Speicheradresse, die der Pointer selber besitzt, variieren können. Ich weiß sonst nicht, wie ich auf das Ergebnis kommen soll. Die zweite Adresse ist ja nicht immer 27204A14.
Das ist doch Unsinn. Du hast doch die Adresse in deinem Pointer, die liest du aus und addierst das Offset dazu, an der resultierenden Adresse ist der nächste Pointer.
Du musst doch nicht die Position deiner eigenen Variable im Speicher ändern o.ô
12/23/2011 18:51 DreamStyler#13
Quote:
Originally Posted by MrSm!th View Post
Das ist doch Unsinn. Du hast doch die Adresse in deinem Pointer, die liest du aus und addierst das Offset dazu, an der resultierenden Adresse ist der nächste Pointer.
Du musst doch nicht die Position deiner eigenen Variable im Speicher ändern o.ô
Danke für die Antwort! Aber ganz einleuchten tut mir das nicht. Kannst du mir ein Beispiel bezüglich meines Problems geben? Wäre echt klasse!

Fg
12/23/2011 20:06 MrSm!th#14
Quote:
Originally Posted by jacky919 View Post
int* Base = reinterpret_cast<int*> 0xBLABLA
int* erste = reinterpret_cast<int*> *Base + Offset1
int* zweite = reinterpret_cast<int*> *erste + Offset2
...

Zu dem Wert der vorherigen adresse wird ein Offset addiert. Die Summe ist die nächste Addresse, ihrem Wert wird wiederum ein Offset zugefügt und so weiter
^da
12/23/2011 20:18 DreamStyler#15
Hatte ich bereits ausprobiert, funkt leider auch nicht :/.

Fg