12178|13

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8在RAM中执行Code [复制链接]

老早就听说STM8可以在RAM上运行Code,那么有没有可能,我把某个函数编译好打包成数组,在需要的时候再把它放到RAM上去,然后我跑去RAM上运行这段代码?
看了好久这个_fctcpy,好像它的作用只是让程序在链接的时候把某个段链接到RAM上而已,而我是想程序执行之后重链接。请教一下这想法靠谱吗?
此帖出自stm32/stm8论坛

最新回复

                                  这个是IAR 1.20版才有的功能  详情 回复 发表于 2010-12-1 08:04
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
想程序执行之后重链接,这个想法很好,但是哪个程序去执行这个重链接的动作呢?

我没有看到过哪个开发环境提供这个功能,恐怕要你自己写这样的重链接程序。
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 想法不错
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
所有的跳转指令全部用相对跳转,函数指令执行与绝对地址无关,只与相对地址有关。

那么函数有就可以搬到RAM来执行了。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
可使用COSMIC中的函数_fctcpyFLASH中的代码代码拷贝RAM中,并运行。_fctcpyFALSH中拷贝一段可移动代码段到RAM中。_fctcpy寻找linker定义的描述符(此描述符是在RAM中定义段的第一个字符)。本例子在RAM 中定义了一个段.CODE_IN_RAM。所以地一个字符是’C’
需要在程序中应用int _fctcpycharname;
Ram 中创建一个.CODE_IN_RAM段。并在Option 中输入-ic
.CODE_IN_RAM表示在RAM中定义一个CODE_IN_RAM的段。程序可从此起始地址运行。_fctcpy函数使用此段的名字的第一个描述符’C’
-ic’
表示标记这个段为可移动的段。可将FLASH中的代码移动到此。

在程序代码中完成函数:
#pragma section (CODE_IN_RAM)
functions()
{

var1= 0x99;


var2= 0x88;


var3= 0x77;

}
routine()
{

var1++;


var2++;


var3++;

}
#pragma section ()
打开project->settings…->Linker如下图所示配置:

run in ram.JPG

例子如下:
  unsigned char var1,var2,var3;
  int  _fctcpy(char name);
  
  #pragma  section (CODE_IN_RAM)
  functions()
  {
  
var1 = 0x99;

  
var2 = 0x88;

  
var3 = 0x77;

  }
  routine()
  {
  
var1++;

  
var2++;

  
var3++;

  }
  #pragma  section ()
  
  main()
  {
  _fctcpy('C');
//
拷贝pragma section(CODE_IN_RAM)中的函数到RAM
  
functions();
//
调用RAM中的functions 函数
  
routine();
//
调用RAM 中的 routine 函数
  

  while (1)
  
{

  
_asm("nop");

  
_asm("nop");

  
_asm("nop");

  
_asm("nop");

  
}

  }
  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个不错,可以将一段防盗版的程序加密,在一定时间解密到RAM运行,判断是否是盗版的。

这样对于静态的代码分析,就找不到破解点了。
就必须整个程序去通读去判断,另外也加一个正常代码解压到RAM执行,这样就不能随便屏蔽掉解压执行。
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 记号下
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 有点像菜农的汇编数组,动态链接调用
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 mark
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 mark
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 其实以STM8S 300k次的flash擦写寿命,把flash中的代码倒腾倒腾,也不失为一个加密的妙法。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
                                 高人
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
IAR 直接:
__ram_func
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                  这个是IAR 1.20版才有的功能
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved