2009-03-27 8 views
1

Q. Ich habe einen Hex-Code auf einer Maschine ausgeführt. Wie berechne ich die Prüfsumme des gesamten Codes zur Laufzeit?Laufzeit-CRC-Überprüfung

+0

vermutlich einen CRC-Algorithmus verwenden, wie Sie erwähnt haben? –

+0

Können Sie das ein bisschen mehr erklären? – BobbyShaftoe

+0

Welche Sprache? C++ hat eine CRC-Bibliothek in Boost, Perl hat mehrere auf CPAN, und ich bin sicher, Python, PHP, Scheme und im Grunde jede andere Sprache hat eine. –

Antwort

5

Sie benötigen Lesezugriff auf das gesamte Codesegment. Dies beinhaltet wahrscheinlich das Holen von Symbolen aus dem Linker, die auf die erste und letzte Adresse des Codes verweisen. Sie können diese Adressen in einen geeigneten Datenzeiger umwandeln und einen beliebigen CRC- oder Prüfsummenalgorithmus über das Codesegment ausführen.

Um den CRC zu überprüfen, müssen Sie seinen autorisierenden Wert kennen. Dies kann nach dem Verknüpfen erfolgen, indem der CRC berechnet und in den Initialisierer für eine geeignete Variable gepatcht wird.

In eingebetteten Systemen, in denen ich eine ähnliche Technik wie eine Integritätsprüfung vor dem Ersetzen der Firmware in einem Feldupgrade verwendet habe, ordne ich normalerweise die Speicherzuordnung des Firmware-Images mit einer schreibgeschützten Datenstruktur an. Es ist einfach, ein Dienstprogramm zu schreiben, um den CRC des Bildes zu berechnen und die Struktur zu reparieren. Der Bootloader des eingebetteten Systems kann dann diesen CRC während des Starts überprüfen, um festzustellen, ob eine gültige Firmware vorhanden ist, und auf ein Aktualisierungsprogramm zurückgreifen, falls dies nicht der Fall ist. Natürlich verwendet das Update-Programm denselben CRC, um ein neues Bild zu validieren, bevor es blinkt.

Edit: Einige Referenzen auf CRC, falls seine hilfreich: