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
    }
    

  • Mod

    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?


Anmelden zum Antworten