05.11.2012 Aufrufe

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.3 Selbstmodifizierender <strong>Code</strong><br />

4.<strong>3.</strong>1 Einleitung<br />

Ein weiteres Problem, mit dem dynamische Übersetzer wie die <strong>Code</strong> <strong>Morphing</strong> <strong>Software</strong> umgehen müssen ist<br />

Selbstmodifizierender <strong>Code</strong>. Er tritt zum Beispiel auf, wenn das Betriebssystem ein neues Programm in den<br />

Hauptspeicher lädt. Aber auch Programme selbst können ihren <strong>Code</strong> während der Laufzeit ändern.<br />

Wurde dieser <strong>Code</strong> bereits von der <strong>Code</strong> <strong>Morphing</strong> <strong>Software</strong> übersetzt, so muss diese die Änderungen bemerken. [1],<br />

[3]<br />

Um dies zu realisieren wird der Translation-Bit Buffer genutzt. Für jeden übersetzten Speicherbereich wird ein Bit in<br />

diesem Puffer gesetzt. Sollte nun ein Schreibzugriff auf diesen Speicherbereich durchgeführt werden, so wird der<br />

entsprechende <strong>Code</strong>block neu übersetzt.<br />

Ziel ist es, bei selbstmodifizierendem <strong>Code</strong> ein häufiges Neuübersetzten zu vermeiden. <strong>Die</strong>s wäre insbesondere dann<br />

notwendig, wenn <strong>Code</strong> und Daten vermischt in einem Speicherbereich liegen. Bei jeder Datenänderung würde ebenso<br />

der <strong>Code</strong> neu übersetzt werden.<br />

Um die Zahl der Neuübersetzungen zu verringern, sind verschiedene Verfahren in der CMS implementiert. <strong>Die</strong>se<br />

Verfahren sollen in den nächsten Kapiteln vorgestellt werden. Alle Verfahren sind der Quelle [3] entnommen.<br />

4.<strong>3.</strong>2 Fine Grain Protection<br />

Das erste Verfahren ist die Fine Grain Protection. <strong>Die</strong>ses relativ einfache Verfahren sorgt dafür, dass mit dem<br />

Translation Bit nicht immer eine komplette Seite im Speicher geschützt werden muss. Lässt sich dieser geschützte<br />

Bereich also verkleinern, dann sinkt die Wahrscheinlichkeit, dass bei einem <strong>Code</strong> Daten Mix der <strong>Code</strong>block neu<br />

übersetzt wird, wenn sich nur der Datenbereich geändert hat.<br />

Wichtig ist hierbei, dass dieses Verfahren nur für wenige Bereiche gleichzeitig verwendet wird. Damit ist es möglich<br />

den Speicheraufwand für die übersetzten Bereich zu minimieren.<br />

4.<strong>3.</strong>3 Self Revalidating Translations<br />

Das zweite solche Verfahren sind die Self Revalidating Translations.<br />

Bemerkt die <strong>Code</strong> <strong>Morphing</strong> <strong>Software</strong> den <strong>Code</strong> Daten Mix, so wird der Übersetzung ein Prolog vorangestellt. Dabei ist<br />

es notwendig, dass die Startadresse des <strong>Code</strong>blocks durch die Adresse des Prologs ersetzt wird.<br />

Der konkrete Ablauf soll im Folgenden erläutert werden. Zunächst wird der entsprechende <strong>Code</strong>, mit einem Flag<br />

18

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!