发新帖我要提问
123
返回列表
打印

高分请教香斑竹和STM32高手几个问题

[复制链接]
楼主: 程序匠人
手机看帖
扫描二维码
随时随地手机跟帖
41
程序匠人|  楼主 | 2012-2-24 20:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
第4个问题:如何把一段代码复制到RAM中去运行,并在运行结束后销毁RAM中的这段代码?
直接用memcpy就可以,运行结束后memset就销毁了。一般会配上一些加密算法。ARM有相对PC寻址的指令,代码重定向的时候要注意。有的编译器会有生成可重定向代码的功能
lxyppc 发表于 2012-2-24 09:27


嗯,这个我也研究一下看看。。。。

使用特权

评论回复
42
拿起书本| | 2012-2-24 20:22 | 只看该作者
先顶起来。本人正在抄一本书,这本书对电子工程师很有意义,现在网上还没有电子版,我会一章一章的打出来,希望对大家有帮助。

使用特权

评论回复
43
程序匠人|  楼主 | 2012-2-24 20:30 | 只看该作者
不好意思,没有仔细注意内容。

这个问题我还无法解释,能打开.map文件看看,你的R_tab[]和CNT_v1()分别在什么位置吗? 如果怀疑是写保护的问题,你可以看看选项字节区的设置。

还有一种可能是:因为你是通过仿真器操作的,会不会是仿真器作了什么限制?这只是猜想而已。你可以独立运行一下看看。

又想到一个可能,你的R_tab[],实际被分配到RAM区,这肯定是可以被更改的,所以还是要看.map文件。香水城 发表于 2012-2-24 13:38



给香斑竹上一张艳照:




从这张图中,可以看到const确实是被定义在了非RAM区,仍旧被改写为全0。

使用特权

评论回复
44
laserpic| | 2012-2-24 23:41 | 只看该作者
顶贴.

使用特权

评论回复
45
香水城| | 2012-2-25 08:53 | 只看该作者
对于43楼的现象,匠人试过不用仿真器直接运行吗?

使用特权

评论回复
46
txcy| | 2012-2-25 11:01 | 只看该作者
匠人的问题难度不小啊

使用特权

评论回复
47
无冕之王| | 2012-2-25 11:10 | 只看该作者
匠人的这分比较难拿啊:lol

使用特权

评论回复
48
lxyppc| | 2012-2-25 14:51 | 只看该作者
对于43楼的现象,匠人试过不用仿真器直接运行吗?
香水城 发表于 2012-2-25 08:53

你仿真或不仿真,现象就在那里,不离不弃
你写零或不写零,结果产生差距,不明所以

使用特权

评论回复
49
lxyppc| | 2012-2-25 14:54 | 只看该作者
匠人之前说常量数组可以而函数地址不行,那是因为函数地为奇数,转成偶数也会遇到这个问题

使用特权

评论回复
50
程序匠人|  楼主 | 2012-2-25 15:05 | 只看该作者
匠人之前说常量数组可以而函数地址不行,那是因为函数地为奇数,转成偶数也会遇到这个问题
lxyppc 发表于 2012-2-25 14:54


奇数?偶数?

这个说法有来头吗?

使用特权

评论回复
51
程序匠人|  楼主 | 2012-2-25 15:06 | 只看该作者
对于43楼的现象,匠人试过不用仿真器直接运行吗?
香水城 发表于 2012-2-25 08:53


不用仿真器测试起来比较麻烦,回头找机会专门写段代码验证再说。

使用特权

评论回复
52
yybj| | 2012-2-25 18:43 | 只看该作者
高手太多,只能慢慢消化

使用特权

评论回复
53
tuzihog| | 2012-2-25 23:03 | 只看该作者
mark

使用特权

评论回复
54
程序匠人|  楼主 | 2012-2-26 17:37 | 只看该作者
顶一下,准备散分

使用特权

评论回复
55
哲哲55| | 2012-2-26 20:38 | 只看该作者
高手太多,只能慢慢消化
yybj 发表于 2012-2-25 18:43

嚴重同意

使用特权

评论回复
56
yifanfeng| | 2012-3-1 22:00 | 只看该作者
采用_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中的已加密函数进行解密后运行即可。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则