Optimierung einer Softwarebibliothek für sicherheitsrelevante
Optimierung einer Softwarebibliothek für sicherheitsrelevante
Optimierung einer Softwarebibliothek für sicherheitsrelevante
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