Проверка CRC во время выполнения - PullRequest
1 голос
/ 27 марта 2009

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

1 Ответ

5 голосов
/ 27 марта 2009

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

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

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

Редактировать: Некоторые ссылки на CRC, в случае, если это полезно:

...