首页
社区
课程
招聘
[求助]arm 代码动态复制请教
2010-2-25 12:05 7918

[求助]arm 代码动态复制请教

2010-2-25 12:05
7918
我想在程序运行时,将一段代码复制到固定的位置上执行,

例如:有函数:

    void dym_CODE()
     {
      ...
     }

我想在程序运行的时候,动态的将函数dym_CODE的代码复制到0X40000000处,并在复制完后跳到0X40000000处开始执行,如果是用汇编,比较容易实现,用C语言的话不知道怎么弄?
我用的是ADS1.2,哪位大哥知道的,指点下小弟,谢谢!

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

收藏
免费 0
打赏
分享
最新回复 (10)
雪    币: 240
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
songhowl 2 2010-2-26 12:57
2
0
一个参考:
去看一下arm的scatter 文件,理解什么叫执行view,什么叫load view.
写相应的scatter file.把相应的代码加入定义的执行view中。
然后写一个拷贝的程序,将代码拷贝到相应的区域。会用到ADS生成的一些特殊的变量来标记你的代码的起始位置以及长度。
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
banid 2010-2-26 13:40
3
0
谢谢 songhowl 的回复,我去找下相关的资料看看
雪    币: 220
活跃值: (281)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZhaoYF 2010-2-26 17:38
4
0
ADS没用过
在VS中可以这样
typedef void T_dym_CODE ( void );
T_dym_CODE  *My_dym_CODE ;
My_dym_CODE  =  (T_dym_CODE  *)0X40000000;
My_dym_CODE();
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
banid 2010-3-1 15:50
5
0
这只是跳到0X40000000但没有复制代码?
雪    币: 220
活跃值: (281)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZhaoYF 2010-3-2 09:45
6
0
复制代码不是很简单么
一个for或while不就解决了
雪    币: 240
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
songhowl 2 2010-3-3 09:37
7
0
对于比较简单的代码,如果没有涉及到地址的重新映射的情况下,可以直接拷贝。比如汇编的指令,可以直接这么做。但是对于复杂的C代码,用scatter文件比较合适,在连接阶段就帮你把地址重新映射好了。动态的执行很多时候并不是简单的拷贝就能做到的。
雪    币: 220
活跃值: (281)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZhaoYF 2010-3-3 11:08
8
0
直接拷贝是没考虑到重定位的情况
...
类似DLL了
请问songhowl
在有重定位的情况下
用scatter文件能否做到让指定代码在任意地址上加载运行
还是只能在编译时指定某个地址
雪    币: 240
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
songhowl 2 2010-3-3 11:32
9
0
不能做到在任意地址上加载运行,只能在指定位置。当然如果你在编写C代码的时候比较注意,是可以做到的,这个时候只要拷贝一下就行了,也就不需要用scatter文件了。前提是你对这个比较了解。
使用scatter文件在指定位置执行是比较保险的方法。
如果了解的比较深入的话,去网上搜一下ARM的位置无关的代码应该怎么编程,以及多试验。
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
banid 2010-3-3 21:15
10
0
请问songhowl在scatter文件指定运行位置,那代码的加载(拷贝)要自己完成,还是编译器会自动生成相应的代码?
雪    币: 240
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
songhowl 2 2010-3-5 09:26
11
0
需要自己完成加载的代码。也是做一个拷贝的动作。
游客
登录 | 注册 方可回帖
返回