29.01.2013 Aufrufe

Optimierung einer Softwarebibliothek für sicherheitsrelevante

Optimierung einer Softwarebibliothek für sicherheitsrelevante

Optimierung einer Softwarebibliothek für sicherheitsrelevante

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 Konzept und Implementierung 46<br />

Implementation des Sprungbefehl-Tests<br />

Bei den Sprungbefehlen werden unbedingte Sprünge sowie bedingte Sprünge auf ihre<br />

korrekte Funktionalität geprüft.<br />

Zuerst wird der unbedingte Sprung geprüft und zwar wie folgt: Es wird eine Schleife <strong>für</strong><br />

drei unbedingte Sprünge initialisiert. Bei einem erfolgreichen Sprung wird hoch gezählt.<br />

Falls die drei Sprünge erfolgt sind, wird die Schleife verlassen und es wird mit weiteren<br />

Tests fortgefahren, ansonsten verbleibt die CPU in der Schleife. Diese Schleife zeigt<br />

folgendes Listing:<br />

1. "ldr r0, =0x00000001; # belade Register mit Werte"<br />

2. "ldr r1, =0x00000008; # --"<br />

3. "BER: NOP; # No Operation"<br />

4. "mov r0, r0,LSL #1; # eins schieben"<br />

5. "teq r0, r1; beq BER1; # vergleiche, ob 3 Spuenge erfolgt sind"<br />

6. "b BER; # falls nicht -> zurueck"<br />

Ein bedingter Sprung findet statt, falls bestimmte Kombinationen von Statusflags vorhanden<br />

sind 15 . Geprüft wird wie folgt: es wird eine Operation mit bestimmten Werten<br />

durchgeführt, infolge deren, bestimmte Flags gesetzt („1“) oder nicht gesetzt („0“) werden;<br />

anhand des Ergebnisses soll ein bedingter Sprung erfolgen und zwar zum nächsten<br />

Test; falls nicht, verfängt sich die CPU in <strong>einer</strong> Endlosschleife. Dies zeigt die folgende<br />

Listing:<br />

1. "ldr r0, =0xAAAAAAAA; # belade Register mit Werten"<br />

2. "ldr r1, =0xAAAAAAAA; # --"<br />

3. "mov r3, #0x00000000; # --"<br />

4. "Berror0:NOP; # "<br />

5. "NOP; # No Operation"<br />

6. "NOP; # --"<br />

7. "sub r2, r0, r1; # Subtraktion => 0X00000000"<br />

8. "teq r3, r2; bne Berror0; # falls ungleich , "<br />

" # zurueck; Z-Flag nicht gesetzt"<br />

9. "b Berror1; # ansonsten weiter"<br />

10."Berror2: b Berror2; # beide versagt, endlosschleife"<br />

11."Berror1: NOP; # die naechste Schleife"<br />

15 z.B. beim Befehl „TEQ“ muss der Flag Z gesetzt(gleich) oder nicht gesetzt(ungleich) sein

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!