2009-03-27 7 views
1

Q. J'ai un code hexadécimal exécuté sur une machine. Comment puis-je calculer la somme de contrôle de l'intégralité du code lors de l'exécution?Contrôle CRC Runtime

+0

utiliser probablement un algorithme CRC comme vous l'avez mentionné? –

+0

Pouvez-vous expliquer cela un peu plus? – BobbyShaftoe

+0

Quelle langue? C++ a une bibliothèque CRC dans Boost, Perl en a plusieurs sur CPAN, et je suis sûr que Python, PHP, Scheme et fondamentalement tous les autres langages en ont un. –

Répondre

5

Vous devez avoir un accès en lecture à l'ensemble du segment de code. Cela implique probablement d'obtenir des symboles de l'éditeur de liens qui référencent les première et dernière adresses du code. Vous pouvez convertir ces adresses en un pointeur de données de taille appropriée et exécuter n'importe quel algorithme CRC ou somme de contrôle commun que vous souhaitez sur le segment de code.

Pour vérifier le CRC, vous devez connaître sa valeur faisant autorité. Cela peut être fait après la liaison en calculant le CRC et en le corrélant dans l'initialiseur pour une variable appropriée. Dans les systèmes embarqués où j'ai utilisé une technique similaire comme vérification d'intégrité avant de remplacer le firmware dans une mise à niveau, j'ordonne généralement la carte mémoire de l'image du firmware pour commencer par une structure de données en lecture seule. Il est facile d'écrire un utilitaire pour calculer le CRC de l'image et réparer la structure. Le chargeur de démarrage du système embarqué peut ensuite vérifier ce CRC pendant le démarrage pour déterminer si un microprogramme valide est présent et revenir à un utilitaire de mise à jour si ce n'est pas le cas. Bien sûr, l'utilitaire de mise à jour utilise ce même CRC pour valider une nouvelle image avant de clignoter.

Edit: Quelques références sur CRC, dans le cas où son utile: