Frage zu Adressen [gelöst]



  • Hallo,

    ich habe mir ein Buch über Assembler Programmierung (x86) gekauft.
    Da meine Kenntnisse noch nicht zur Assemblerprogrammierung reicht,
    betrachte ich erst einmal den Assembler Code den der Compiler mir liefert:

    int x;
    int main()
    {
    	x=5;
    
    return true;
    }
    

    Wird zu:

    int main()
    {
    01351370  push        ebp  
    01351371  mov         ebp,esp 
    01351373  sub         esp,0C0h 
    01351379  push        ebx  
    0135137A  push        esi  
    0135137B  push        edi  
    0135137C  lea         edi,[ebp-0C0h] 
    01351382  mov         ecx,30h 
    01351387  mov         eax,0CCCCCCCCh 
    0135138C  rep stos    dword ptr es:[edi] 
    	x=5;
    0135138E  mov         dword ptr [x (1357148h)],5 
    	return true;
    01351398  mov         eax,1 
    }
    

    Meine Frage ist nun wo dier Wert für die Zieladresse der Zuweisung x=5; herkommt, also das (1357148h)?
    Dieser Wert ändert sich bei jedem Neustart des Programms 😕



  • Hallo,
    welches Betriebssystem verwendest du ?



  • Ahhh hab ich vergessen zu schreiben:

    Wndows 7 (64 Bit) und als Compiler habe ich Visual Studio 2008 verwendet.



  • Deine Zahl wird in irgendeine Speicherstelle geschrieben. Warum sollte diese Speicherstelle bei dynamischer Speicherverwaltung immer die gleiche sein?



  • Ich habe den Grund rausgefunden:

    Windows 7 hat eine "address space layout randomization".

    Dies soll Angriffe mit Bufferüberläufen erscheren.
    In früheren Windows-Versionen begannen Programme immer bei 0x400000 jetzt nicht mehr.
    Daher ändert sich der Wert der Speicherstelle, obwohl es sich um eine statische variable handelt.
    Der Wert (1357148h) aus meinem früheren Beitrag ist also dynamisch, aber statisch bezogen auf die "base adress" des Programms.


Anmelden zum Antworten