В. У меня на машине запущен шестнадцатеричный код. Как рассчитать контрольную сумму всего кода во время выполнения?
Проверка CRC во время выполнения
Ответы (1)
У вас должен быть доступ для чтения ко всему сегменту кода. Это, вероятно, связано с получением символов от компоновщика, которые ссылаются на первый и последний адреса кода. Вы можете преобразовать эти адреса в указатель данных подходящего размера и запустить любой общий алгоритм CRC или контрольной суммы, который вы хотите, для сегмента кода.
Чтобы проверить CRC, вам необходимо знать его авторитетное значение. Это можно сделать после связывания, вычислив CRC и вставив его в инициализатор для подходящей переменной.
Во встроенных системах, где я использовал аналогичный метод в качестве проверки целостности перед заменой микропрограммы при обновлении на месте, я обычно составляю карту памяти образа микропрограммы так, чтобы она начиналась со структуры данных только для чтения. Легко написать утилиту для вычисления CRC изображения и исправления структуры. Затем загрузчик встроенной системы может проверить CRC во время загрузки, чтобы определить, присутствует ли действующая прошивка, и вернуться к утилите обновления, если нет. Конечно, утилита обновления использует тот же CRC для проверки нового образа перед прошивкой.
Изменить: некоторые ссылки на CRC, если это полезно: