3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
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