Addressen (RVA)
-
Hallo !
Kurze Frage bezügliche Addressen von Variablen etc.
Wenn ich ein Programm schreibe und mir zum Beispiel die Addresse einer Variable ausgeben lasse, bekommt man die Addresse Relative zum BaseImage, die müsste dann bei jedem Anderen Nutzer gleich sein oder ?
Mich würde das interessieren, wegen ReadProcessMemory() usw., ob man davon ausgehen kann das die (RVA) Addresse der Variable immer gleich bleibt bei jedem Start.
Kurz gesagt glaube ich meine ich das Image welches in den RAM geladen wird, wenn das Programm gestartet wird, sieht immer gleich aus !?
MfG
Gast235825
-
Die Adressen sind nicht immer zwangsläufig gleich. Die Adressen werden vom Betriebssystem vergeben, und darum kann es passieren, daß die Adresse sich ändert, je nachdem, in welcher Phase des Programmablaufes die Variable definiert wird.
-
du bekommst doch keine addresse relative zur image base, wer hat dir das denn verzapft?
-
Ah sry, ich bekomm da ja die VA also die Virtuelle Addresse, stimmt, hab ich mich verschaut, ok dann kann die Addresse sich ändern.
Aber um was es mir geht ist die RVA, die müsste doch immer gleich sein oder ??
-
Glaub ich verstehs jetzt nicht mehr.
Die Addresse die ich mit dem Addresoperator & bekomm ist : 0022FF74,
ImageBase ist: 00400000
Wenn is die VA wäre, müsste die Addresse doch größer als 00400000 sein oder ??
Kennt vielleicht jemand Links zu diesem Thema ?? Finde darüber nur sehr wenig.
-
Gast12464 schrieb:
Glaub ich verstehs jetzt nicht mehr.
Die Addresse die ich mit dem Addresoperator & bekomm ist : 0022FF74,
ImageBase ist: 00400000
Wenn is die VA wäre, müsste die Addresse doch größer als 00400000 sein oder ??
Kennt vielleicht jemand Links zu diesem Thema ?? Finde darüber nur sehr wenig.
Warum. Schon mal was von Codesegment und Datensegment gehört? Der Code wird in einem anderen Adressraum abgelegt als die zugehörigen Variablen. Da kann die Variablen-Adresse auch schon mal niedriger sein.
-
Ja, ich kenn die Segmente, und weiß wozu die gut sind.
Ich weiß nur wie man vom File Offset umrechnet auf die RVA, dabei muss man schaun in welchem Segment sich diese Addresse befindet und dann umrechnen.
Aber wenn ich die Addresse 0022FF74 anschaue, passt die in kein Segment, hier sind die Segmente :
.text VA = 00001000
.data VA = 00002000
.rata VA = 00003000
.bss VA = 00004000
.idata VA = 00005000In welchem Segment soll die Addresse liegen ? Es handelt sich hier um die Addresse eines Integer, ist nur ein kleines Testprogramm.
-
Edit: Die VA's hier sind aber Relativ zur Image Base!
-
elektrochecktnix labert wieder mal müll.
warum sollte die adresse größer als 0x400000 sein müssen?! 0x400000 ist die addresse an der das image in dem addressraum eingeblendet wird. der addressraum geht von 0x00000000-0xFFFFFFFF und 0x00000000-0x7FFFFFFF is für dein programm.
-
Wußte ich nicht... aber trotzdem, wo liegt diese Addresse ?

Und was für Daten liegen vor 0x04000000 (base image) ?
Und wo liegt der Heap bzw. der Stack ??