Проверка CRC во время выполнения

В. У меня на машине запущен шестнадцатеричный код. Как рассчитать контрольную сумму всего кода во время выполнения?


person Community    schedule 27.03.2009    source источник
comment
предположительно использовать алгоритм CRC, как вы упомянули?   -  person Mitch Wheat    schedule 27.03.2009
comment
Вы можете объяснить это поподробнее?   -  person BobbyShaftoe    schedule 27.03.2009
comment
Какой язык? В C ++ есть библиотека CRC в Boost, у Perl есть несколько библиотек на CPAN, и я уверен, что она есть в Python, PHP, Scheme и практически во всех других языках.   -  person Max Lybbert    schedule 27.03.2009


Ответы (1)


У вас должен быть доступ для чтения ко всему сегменту кода. Это, вероятно, связано с получением символов от компоновщика, которые ссылаются на первый и последний адреса кода. Вы можете преобразовать эти адреса в указатель данных подходящего размера и запустить любой общий алгоритм CRC или контрольной суммы, который вы хотите, для сегмента кода.

Чтобы проверить CRC, вам необходимо знать его авторитетное значение. Это можно сделать после связывания, вычислив CRC и вставив его в инициализатор для подходящей переменной.

Во встроенных системах, где я использовал аналогичный метод в качестве проверки целостности перед заменой микропрограммы при обновлении на месте, я обычно составляю карту памяти образа микропрограммы так, чтобы она начиналась со структуры данных только для чтения. Легко написать утилиту для вычисления CRC изображения и исправления структуры. Затем загрузчик встроенной системы может проверить CRC во время загрузки, чтобы определить, присутствует ли действующая прошивка, и вернуться к утилите обновления, если нет. Конечно, утилита обновления использует тот же CRC для проверки нового образа перед прошивкой.

Изменить: некоторые ссылки на CRC, если это полезно:

person RBerteig    schedule 27.03.2009