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.2 Modularisierung<br />

void hello() {<br />

pr<strong>in</strong>tf ("Hello World!\n");<br />

}<br />

void foo() {<br />

hello();<br />

}<br />

(a) Quellcode<br />

(b) B<strong>in</strong>ärdaten <strong>in</strong> ELF Datei<br />

Abbildung 4.3: Daten <strong>in</strong> e<strong>in</strong>er ELF-Datei und deren Zusammenhang<br />

In Teilabbildung (a) ist der Quellcode e<strong>in</strong>es e<strong>in</strong>fachen Beispiels gegeben: e<strong>in</strong>e Funktion foo, welche e<strong>in</strong>e Funktion<br />

hello aufruft, welche wiederum die Funktion pr<strong>in</strong>tf aufruft.<br />

Teilabbildung (b), darunter, zeigt den Inhalt der ELF-Objektdatei für Atmel AVR Architekturen, die durch Übersetzen mit<br />

e<strong>in</strong>em Compiler entsteht.<br />

In der Mitte ist der B<strong>in</strong>ärcode dargestellt. In der .data-Sektion erkennt man den Text “Hello World!”. In der Textsektion<br />

sieht man den Code der beiden Funktionen hello und foo. Im Code erkennt man die Funktionsaufrufe (call) und<br />

sieht, dass als Zieladresse für beide null angegeben ist.<br />

Rechts ist die Relokationstabelle für die Sektion .text abgebildet. Die markierte Zeile bedeutet, dass an der Position<br />

0xa die Adresse des Symbols hello e<strong>in</strong>gefügt werden soll. Die Position 0xa im B<strong>in</strong>ärcode entspricht der Position<br />

des Aufrufs der Funktion hello <strong>in</strong> der Funktion foo. Die Art der E<strong>in</strong>fügung ist mit dem Attribut R_AVR_CALL<br />

beschrieben. Dadurch weiß der L<strong>in</strong>ker, dass er die Adresse des Symbols hello nicht direkt an der Stelle 0xa e<strong>in</strong>fügen<br />

darf, sondern dass dort e<strong>in</strong> Sprungbefehl steht und er die Position erst zwei Byte später e<strong>in</strong>fügen soll.<br />

Die Symboltabelle (l<strong>in</strong>ks) beschreibt schließlich das Symbol hello genauer. In diesem Beispiel zeigt es auf die Position<br />

0 <strong>in</strong> der Sektion .text, also auf den Beg<strong>in</strong>n der Funktion hello. Man sieht auch, dass das Symbol puts, welches<br />

hier für die Funktionalität von pr<strong>in</strong>tf verwendet werden soll, nicht def<strong>in</strong>iert ist (als Sektion ist undef angegeben). Es<br />

muss von e<strong>in</strong>er anderen Objektdatei angeboten werden.<br />

45

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!