Alle Adressen durchlaufen
-
Hi,
ich möchte mit der Adresse 0x00000000 starten und dann bis 0xFFFFFFFF alle Speicheradressen durchlaufen. Wie zähle ich die Adresse hoch?
Fragt nicht warum.
-
Hi,
also 1. ich frage nicht wieso.
2. Ich sage gleich das es ein Hässlicher Code ist und nicht besonders empfehlenswert.// Ich gehe einfach davon aus das unsigned long 32-Bit hat. // Da dies heute auf den meisten 32-Bit OS so ist. unsigned long *foo = (void*) 0x00000000; // So nun zeigt foo auf adresse 0x00000000 while(foo != (void*)0xFFFFFFFF) { // Mach damit was du willst damit ++foo; // nächste Adresse }
-
korrigiert mich, wenn ich das falsch ist, aber ++foo erhöht den zeiger um sizeof(long) und nicht 1, schliesslich ist das ja auch die schreibweise, die man benutzt, um mit arrays zu arbeiten. der grundtyp müsste daher char sein:
unsigned char *foo = NULL; do { // ... } while( ++foo );
-
hmm
Stimmt.naja er muss einfach nur aus unsigned long unsigned char machen.
unsigned char *foo = (void*) 0x00000000; // So nun zeigt foo auf adresse 0x00000000 while(foo != (void*)0xFFFFFFFF) { // Mach damit was du willst damit ++foo; // nächste Adresse }
-
Auch wenn dies für IA32 Systeme keinen Unterschied macht, aber
unsigned char *foo = 0;
ist ein Nullzeiger und nicht unbedingt ein Zeiger, der auf die Adresse 0 zeigt.
-
möchte schrieb:
Fragt nicht warum.
Ich frage nicht. Aber das Betriebssystem.
Schon mal was von Read-only Speicher gehört? Schon mal was von Prozessfremden Speicher gehört? Dein Programm wird so schnell abgeschossen, wie du gar nicht schauen kannst. :p
-
btw. sind das sowieso nur relative Adressangaben, aber das weißt du ja, oder?