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.