14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

4 Basisschicht e<strong>in</strong>es Verwalters<br />

explizite Änderung der Software möglich. Alternativ können zusätzliche Informationen von außen<br />

h<strong>in</strong>zugefügt werden, die das Auff<strong>in</strong>den der Verweise ermöglichen.<br />

4.4.2.1 Statische Verweise<br />

Wie bereits erwähnt, werden statische Verweise durch E<strong>in</strong>träge <strong>in</strong> der Relokationstabelle beschrieben.<br />

Anhand dieser Informationen kann festgestellt werden, ob e<strong>in</strong> Verweis auf e<strong>in</strong> Modul existiert. Falls<br />

e<strong>in</strong> Verweis existiert, so ist die genaue Position <strong>in</strong> den Relokationsdaten beschrieben. E<strong>in</strong>e Anpassung<br />

des Verweises kann somit leicht vorgenommen werden.<br />

4.4.2.2 <strong>Dynamische</strong> Verweise durch <strong>in</strong>direkte Nutzung<br />

Wird e<strong>in</strong> Modul, also e<strong>in</strong>e Variable oder e<strong>in</strong>e Funktion, <strong>in</strong>direkt genutzt, so bedeutet das, dass an der<br />

Stelle der Nutzung nicht direkt die Adresse des Elements durch den L<strong>in</strong>ker e<strong>in</strong>gefügt wird, sondern<br />

dass die Adresse bereits zu e<strong>in</strong>em früheren Zeitpunkt im Speicher abgelegt wurde und nun von dort<br />

benutzt wird.<br />

E<strong>in</strong> e<strong>in</strong>faches, bereits genanntes Beispiel ist e<strong>in</strong> Funktionsaufruf mittels Funktionszeiger. Die Adresse<br />

der Funktion wurde vorher <strong>in</strong> e<strong>in</strong>er Variablen als Funktionszeiger abgelegt. Das allgeme<strong>in</strong>e Problem<br />

ist, dass man feststellen muss, wo die Adresse der Funktion überall benutzt wird, das heißt, wo überall<br />

Kopien angelegt werden. Nur dann kann man alle Verweise auf die Funktion <strong>in</strong> Erfahrung br<strong>in</strong>gen, um<br />

sie anzupassen.<br />

Lösungsansatz: Verweise aufspüren<br />

Den Weg des Funktionszeigers kann man mithilfe e<strong>in</strong>er Code- und Datenflussanalyse [Hec77] verfolgen.<br />

Man beg<strong>in</strong>nt an der Stelle, an der die Adresse e<strong>in</strong>er Funktion erstmals verwendet wird. Bei dem<br />

oben genannten Beispiel wird die Adresse der Funktion <strong>in</strong> e<strong>in</strong>er Variablen abgelegt. Diese Position<br />

lässt sich anhand der Relokations<strong>in</strong>formationen bestimmen. Von dort ausgehend wird der weitere<br />

Programmablauf simuliert, <strong>in</strong>dem der vorliegende B<strong>in</strong>ärcode teilweise <strong>in</strong>terpretiert wird. Dabei wird die<br />

Position der Adresse überwacht und Zugriffe verfolgt. Mithilfe dieser Technik kann man nachvollziehen,<br />

woh<strong>in</strong> die Adresse kopiert, wie sie verwendet und wo sie abgelegt wird.<br />

Diese Analyse hat jedoch e<strong>in</strong>ige Nachteile. Zum e<strong>in</strong>en ist sie architekturabhängig, da Wissen über<br />

die Wirkung jedes Masch<strong>in</strong>enbefehls benötigt wird. Dies macht die Realisierung dieses Ansatzes sehr<br />

aufwendig. H<strong>in</strong>zu kommt, dass auch die Analyse selbst aufwendig se<strong>in</strong> kann und zudem nicht immer<br />

sichergestellt ist, dass sie e<strong>in</strong> brauchbares Ergebnis liefert. Wenn sich der Programmablauf abhängig<br />

von externen Ereignissen <strong>in</strong> verschiedene Richtungen entwickeln kann, müssen alle möglichen Wege<br />

<strong>in</strong> der Simulation berücksichtigt werden. Liefern verschiedene Wege sich widersprechende Aussagen,<br />

so ist das Ergebnis der Analyse für unsere Zwecke unbrauchbar. Der Aufwand muss somit sorgfältig<br />

gegenüber dem Nutzen abgewogen werden.<br />

Für viele E<strong>in</strong>satzzwecke kann e<strong>in</strong> vere<strong>in</strong>fachtes Verfahren jedoch ausreichen. Dabei ist das Ziel,<br />

lediglich festzustellen, ob die Adresse e<strong>in</strong>er Funktion als Zeiger Verwendung f<strong>in</strong>det oder ausschließlich<br />

<strong>in</strong> Sprungbefehlen und Funktionsaufrufen verwendet wird. Um diese Unterscheidung zu treffen, reicht<br />

es aus, den Code an den Stellen zu prüfen, an denen laut Relokations<strong>in</strong>formationen e<strong>in</strong>e Referenz<br />

auf den Code e<strong>in</strong>gefügt werden soll. Handelt es sich um e<strong>in</strong>en Sprungbefehl, so wird die Adresse<br />

direkt verwendet. Handelt es sich nicht um e<strong>in</strong>en Sprungbefehl oder wird die Adresse im Datenbereich<br />

e<strong>in</strong>gefügt, dann wird sie vermutlich <strong>in</strong>direkt verwendet.<br />

66

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!