2009-03-27 3 views
1

Q. 기계에서 16 진 코드가 실행 중입니다. 런타임시 전체 코드의 체크섬을 어떻게 계산합니까?런타임 CRC 검사

+0

추천? –

+0

조금 더 설명해 주시겠습니까? – BobbyShaftoe

+0

어떤 언어입니까? C++에는 Boost에 CRC 라이브러리가 있으며 Perl은 CPAN에서 여러 가지를 사용할 수 있습니다. Python, PHP, Scheme 및 기본적으로 다른 모든 언어에 하나가 있습니다. –

답변

5

전체 코드 세그먼트에 대한 읽기 권한이 있어야합니다. 여기에는 코드의 첫 번째 및 마지막 주소를 참조하는 심볼을 링커에서 가져 오는 작업이 포함됩니다. 이러한 주소를 적절한 크기의 데이터 포인터로 캐스팅하고 코드 세그먼트에서 원하는 일반적인 CRC 또는 체크섬 알고리즘을 실행할 수 있습니다.

CRC를 확인하려면 해당 CRC 값을 알아야합니다. 이것은 CRC를 계산하고이를 적합한 변수에 대한 이니셜 라이저로 패칭함으로써 연결 한 후에 수행 할 수 있습니다.

필드 업그레이드에서 펌웨어를 대체하기 전에 무결성 검사와 비슷한 기술을 사용했던 임베디드 시스템에서 나는 일반적으로 펌웨어 이미지의 메모리 맵을 읽기 전용 데이터 구조로 시작합니다. 이미지의 CRC를 계산하고 구조를 수정하는 유틸리티를 작성하는 것은 쉽습니다. 그런 다음 임베디드 시스템의 부트 로더가 부팅 중 CRC를 확인하여 유효한 펌웨어가 있는지 확인하고, 그렇지 않은 경우 업데이트 유틸리티로 폴백 할 수 있습니다. 물론 업데이트 유틸리티는 동일한 CRC를 사용하여 깜박이기 전에 새 이미지의 유효성을 검사합니다.

편집 : 일부 경우 CRC에 대한 참조, 그 도움 :