采用_ramfunc 方式,虽然function会被拷贝到ram,但Flash中仍存在其备份,无法加密。
窃以为以下方法或许可行, 已 function_2_encrypt() 为例:
1. 将其声明如下 void function_2_encrypt __attribute__((section("encrypt_sec")))
2. 在link script 中定义encrypt section 并定义其开始和结束符号用以标记其范围,并规定该section加载到flash中,运行在ram中, 在MDK中很容易写脚本, IAR请参考其手册。
3. 写一个PC端的小程序解析生成的*.out目标文件中的encrypt section, 并加密之,加密后补0以确保文件大小不变。
4。 在Main 函数的开始出写解密代码直接对在RAM中的已加密函数进行解密后运行即可。 |