AW: Wozu Relocation?
Richtig, und bei speziellen (Mikro-?)Prozessoren gibt es soweit ich weiß auch Pointer-Längen, die kein Vielfaches von 8 sind.
|
AW: Wozu Relocation?
Weiß Jemand, wie diese Relocationstabellen aufgebaut sind?
Entweder man gibt da mit an, was wie angepasst werden muß (bei jeder Stelle einzeln oder indem man Gleiches gruppiert), oder man analysiert die Stelle, welche angepasst werden muß, oder man definiert, daß die anzupassenden Stellen immer nur ein bestimmtes Format haben können/dürfen. Ersteres und Letzeres ist einfacher und ich würde Eines davon verwenden, denn es gibt nicht nut Jumps anzupassen, sondern auch "Zeiger" auf betimmte Resourcen, wie z.B. vielen String-Konstanten im Code. |
AW: Wozu Relocation?
Zitat:
|
AW: Wozu Relocation?
Zitat:
Zitat:
Wenn man nur relativ (von wo aus auch immer) adressiert und das von der Hardware unterstützt wird, dann braucht man keine Relocationstabellen. Je mehr Adressierungsarten unterstützt werden, desto komplizierter werden auch die Tabellen (oder sonstige Methoden). |
AW: Wozu Relocation?
Also ich hab das noch grob in Erinnerung, sind bereits zwei Semester her seit der BS VO xD
Im Grunde ist es ja so, dass DLLs als Shared Memory Objekte geladen werden, sprich das Betriebssystem weiß, ok, an diesem Modul wird sich im Speicher kaum etwas ändern, laden wirs ein einziges mal und jedesmal, wenn eine Anwendung, egal welche und wie viele, darauf zugreifen wollen, kriegen sie dieselbe Adresse im Hauptspeicher bzw. dieselbe (=einzige) Instanz des Moduls. Folglich kann es der Fall sein, dass z.B. mehrere DLLs konfliktäre Anfangsadressen haben. Die DLL wird dann auf eine bestimmte andere freie Stelle im Speicher geladen/gemappt und die Relocation wird angewandt. Ich weiß jetzt nicht genau, inwiefern Virtualisierung bei shared Objekten stattfindet.. Beispiel:
Code:
Dasselbe gilt im Grunde auch für non-shared Memory Objekte (Exe?). Deren Adresse kann auch mit bereits geladenen DLLs kollidieren.
Shared Objekt "X":
Basisadresse: 10 Größe: 100 Adressraum: 10..110 Shared Objekt "Y": Basisadresse: 100 Größe: 50 Adressraum: 100..150 - X wurde geladen, Y soll nun geladen werden - Adressraum bereits belegt, Relocation muss stattfinden -- Y an eine freie und genügend große Stelle laden -- alle absoluten Adressen dementsprechen neu berechnen (hier hilft dann evt. die Relocation Table iwie, kA. wie genau; relative Adressen werden übrigens nicht angerührt, was ja Sinn macht) Achja, wie genau dann die Relocation funktioniert weiß ich auch nicht. Das haben wir, glaub ich, gar nicht in Detail durchgenommen. Bin mir da aber absolut nicht mehr sicher. Du kannst dir da vlt. etwas besseres daraus reimen?! |
AW: Wozu Relocation?
Danke für den ausführlichen Post, aber so weit war mir das schon klar. Ich stand nur irgendwie auf dem Schlauch, wo man sowas braucht, da ich beim Speicher nur gedacht habe an: Code (relative Sprünge), Stack (auch relativ) und Heap (sowieso dynamisch). An sowas wie Konstanten oder globale Variablen hatte ich nicht gedacht.
|
AW: Wozu Relocation?
Zitat:
Das es passiert, ist wichtig zu wissen. Warum es nötig ist, ist wichtig zu wissen. Was allgemein gemacht wird / werden kann, ist relativ trivial. Was im Detail passiert ist ziemlich System-spezifisch und interessiert nur sehr wenige. |
AW: Wozu Relocation?
Zitat:
Gruß, Sven |
AW: Wozu Relocation?
Wenn du mehr über den Aufbau der .reloc Section wissen willst, schau mal hier rein:
http://msdn.microsoft.com/en-us/libr.../gg463119.aspx Grob gesagt enthält die Tabelle (unter x86 und x64) die direkten Offsets zu den absoluten Adressen. Opcodes, Prefixes, etc. werden sozusagen einfach übersprungen. Unter Verwendung sind zur Zeit (bei Windows Kompilaten) nur zwei verschiedene Relocation Typen. Bei beiden wird erst die Differenz zwischen gewünschter ImageBase und reeller ImageBase gebildet und dann zur Adresse addiert. BASED_HIGHLOW kommt hierbei bei 32 bit Kompilaten vor und besagt, dass die Zieladresse 32 Bit lang ist. 64 Bit Kompilate verwenden stattdessen BASED_DIR64, um zu signalisieren, dass volle 64 Bit für eine Adresse verwendet werden. Laut Dokumentation gibt es noch weitere (zZ. unbenutze Typen), welche beispielsweise auch 16 Bit Adressen signalisieren könnten. |
AW: Wozu Relocation?
Okay, danke für die Info. (Das ist mal wieder typisch Microsoft, das Dokument nur als Word-Document bereitzustellen... ich habe hier gerade kein Programm um sowas zu öffnen.)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz