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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

4 Konzept und Implementierung 45<br />

8. "stmdb r12, {r0-r5}; # Registerinhalte ab Speicheradresse"<br />

" # die in R12 steht, schpeichern"<br />

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

10. "NOP; #"<br />

11. "NOP; #"<br />

12. "NOP; # damit Schreibvorgang Wirkung zeigt"<br />

13. "ldmdb r12, {r6-r11}; # Werte vom Schpeicher holen"<br />

14. "teq r0, r6; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

15. "teq r1, r7; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

16. "teq r2, r8; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

17. "teq r3, r9; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

18. "teq r4, r10; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

19. "teq r5, r11; bne LSMError; # vergleichen, falls ungleich -> Error"<br />

In der Zeile 1 wird die Adresse im RAM, ab der die Inhalte der Register gespeichert werden,<br />

in das R12 geladen. In den Zeilen 2 bis 7 werden die Register R0-5 mit den Testwerten<br />

beschrieben. In der Zeile 8 werden die Inhalte der Register in den RAM geschrieben.<br />

Es wird vier Zyklen keine Aktion ausgeführt, damit de Schreibvorgang seine<br />

Wirkung zeigt. In Zeile 13 werden die Werte in die Register R6-11 vom Speicher geschrieben.<br />

In den Zeilen 14 bis 19 werden die vom RAM geholten Werte mit Referenzwerten<br />

verglichen.<br />

Implementierung der „Test“- und „Compare“-Tests<br />

Der ARM7TDMI-CPU stehen zwei Arten von Test- und Vergleichsbefehlen, sowie deren<br />

Modifikationen zur Verfügung, und zwar TST und CMP. Diese Befehle werden gemeinsam<br />

geprüft, also CMP mit Hilfe von TST und umgekehrt. Die Funktionsweise des Tests<br />

wird anhand des Quellcodes erläutert.<br />

1. "ldr r1, =0xA5555555; "<br />

2. "ldr r2, =0x15555555; "<br />

3. "mrs r0, cpsr; "<br />

4. "cmp r1, r2; "<br />

5. "mrs r3, cpsr; "<br />

6. "teq r3, r0; bne CTError; "<br />

In den Zeilen 1 und 2 werden die Register mit Testwerten befüllt. In der Zeile 3 wird der<br />

aktuelle Inhalt des Current Programm Status Registers (CPSR) gespeichert, um Änderungen<br />

in den Statusflags festzuhalten. In der Zeile 4 wird der zu testende Befehl (hier<br />

CMP) ausgeführt. Anschließend wird in der Zeile 5 der Inhalt des CPSR nach der Operation<br />

gespeichert und die beiden Werte mit der Erwartungshaltung verglichen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!