Visual Studio - Projekt Speicherbereiche / -größe festlegen

thTwentY

Cadet 3rd Year
Registriert
Feb. 2008
Beiträge
51
Hallo Zusammen,

ich arbeite gerade an einem Projekt und teste gerade eine eigens implementierte Datenstruktur in C. Bei jeder neuen Debugsession werden die Speicherbereiche für Variablen etc. neu vergeben und das nervt gewaltig.

1. Durchlauf
Variable X hat die Adresse 0x0097bed4

2. Durchlauf
Variable X hat die Adresse 0x00ff3af10

...

Weiß jemand von euch ob Visual Studio eine Funktion oder Tool bereitstellt, um diese Speicherbereiche für ein Projekt festlegen und fixieren zu können? Muss man das dem OS iwie beibringen, dass das Programm dieses Speicherlayout verwenden soll?

z.B.
.data = 0x000 - 0x1FF
.heap = 0x200 - 0x3FF
.stack = 0x400 - 0x5FF


Vielleicht weiß jemand was und kann mir helfen 🙂
Danke und schöne Grüße
 
Ist ein Feature und kein Bug (Stichwort ALSR). Es gibt in diesem Thread noch ein bisschen mehr Infos dazu die evtl. helfen koennen einen Workaround einzurichten.
 
  • Gefällt mir
Reaktionen: nutrix, andy_0, aragorn92 und eine weitere Person
Selbst bei fixem Layout werden die konkreten Adressen wegen ASLR unterschiedlich sein zwischen Programmläufen. Es gibt hier z.B. Informationen um das zu deaktivieren aber sollte man sich genau überlegen, ob man das machen möchte. Und auch das wird noch nicht alle Probleme lösen.

Bist du dir sicher, dass das Memory Layout dein Problem ist? Solltest du nicht beschreiben was dir beim Debuggen Probleme bereitet und fragen, wie man das besser lösen kann? Die Frage hier klingt nach typischen XY-Problem.
 
  • Gefällt mir
Reaktionen: BeBur, andy_m4, nutrix und eine weitere Person
thTwentY schrieb:
ich arbeite gerade an einem Projekt und teste gerade eine eigens implementierte Datenstruktur in C. Bei jeder neuen Debugsession werden die Speicherbereiche für Variablen etc. neu vergeben und das nervt gewaltig.
Das ist vollkommen normal und auch in Ordnung so. Speicher wird immer dynamisch bereitgestellt, und das kannst Du so auch gar nicht beeinflußen. Wie willst Du denn bitte kontrollieren, wer wann was wo wie im RAM an Ressourcen bereitsstellt?
Ergänzung ()

FreshLemon schrieb:
Ich bin kein super erfahrener Programmierer aber benutzt man dafür nicht Pointer?
Ja, aber das hilft Dir doch nicht beim Debuggen, wenn Speicherbereiche angesprochen werden.
Ergänzung ()

schneup schrieb:
Ist ein Feature und kein Bug (Stichwort ALSR).
Das ist aber nur die "halbe" Wahrheit. Fakt ist, daß Speicher wie RAM und Dateisysteme schon immer, seit den Anfängen der IT, dynamisch sind.
 
  • Gefällt mir
Reaktionen: aragorn92 und andy_m4
nutrix schrieb:
Das ist aber nur die "halbe" Wahrheit. Fakt ist, daß Speicher wie RAM und Dateisysteme schon immer, seit den Anfängen der IT, dynamisch sind.
Bis auf den Stack kamen mir Speicherbereiche bei Heimcomputern wie dem C64 immer recht statisch vor. Oder was meinst Du genau mit diesem Satz?
 
Am besten du beschreibst mal was das konkrete Problem ist. Vermutlich kann man das was du willst auch anders bzw. besser lösen.
 
FreshLemon schrieb:
benutzt man dafür nicht Pointer?
Und Pointeroffsets.
thTwentY schrieb:
1. Durchlauf
Variable X hat die Adresse 0x0097bed4

2. Durchlauf
Variable X hat die Adresse 0x00ff3af10
D.h. man schaut beim Debuggen auf Variable X, sowie auf den Speicherbereich (&X +1), (&X+2), (&X+beliebigesOffset)

Diese Ausdrücke (Offsets auf eine Adresse / einen Pointer) kann man ja einfach als Expressions im Debugger eintragen.

Oder ich habe die Frage auch ganz falsch verstanden.
 
  • Gefällt mir
Reaktionen: BeBur
Ich habe letztens sogar auf den Speicher an sich drauf geschaut aus irgendeinem Grund. Ging glaube ich um eine zur Laufzeit geladenen DLL. Wobei die Symbole dazu eigentlich vorhanden waren... ging vermutlich einfacher schneller.

Aber TE muss nochmal mehr schreiben, sonst kann man nicht helfen.
 
Zurück
Oben