No hay una forma portátil de hacer eso.
Si puede encontrar la dirección de inicio y la longitud de su código en la memoria, entonces ciertamente podría calcular el CRC para ello.
Puedo ver el valor de eso si le preocupa que el mecanismo de carga que coloca el programa en la memoria pueda estar roto.
- ¿Qué es push pull en microcontroladores?
- ¿Cuáles son las cosas que debemos tener cuidado al diseñar y fabricar circuitos electrónicos para uso industrial que dura años?
- ¿Cuál es el futuro de los sistemas embebidos? ¿Cuáles son las principales áreas de investigación? ¿Hay algún cambio disruptivo previsto en el futuro cercano?
- ¿Existe una variante incorporada de Lisp / Scheme que pueda usarse en robótica en tiempo real?
- Para un ingeniero electrónico, ¿será útil tomar un entrenamiento de un mes en Emb.Sys? En caso afirmativo, ¿cuáles son los institutos que brindan la mejor capacitación?
Para resolver esto, necesitará saber algo sobre la forma en que el vinculador convirtió su código objeto en un solo ejecutable. Si tiene suerte, creará algún tipo de símbolo externo para el inicio y el final de la sección de código.
En Linux, por ejemplo, el enlazador crea símbolos globales como:
__bss_start, __data_start, _start, _edata y _end.
Si revisa la documentación para el formato binario ELF, podrá averiguar la dirección de inicio y finalización del código en tiempo de ejecución … y a partir de eso, podrá pasar una dirección de inicio de búfer adecuada y longitud para la función CRC de su elección para calcular el CRC de su código en la memoria.
Por supuesto, el programa tendrá que calcular esto usando el código que está dentro del programa, y eso es un problema.
Si escribe algo que computa el CRC para el código, ¿cómo volverá a poner ese número en el programa para que pueda verificarlo en las siguientes ejecuciones sin CAMBIAR el código … lo que alteraría el valor del CRC?
Esto es algo que solo puede solucionarse si no verifica el área de datos preinicializada … ¡pero esto es algo complicado!