首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
智能设备
发新帖
1
0
[求助]arm 代码动态复制请教
发表于: 2010-2-25 12:05
8463
[求助]arm 代码动态复制请教
banid
2010-2-25 12:05
8463
我想在程序运行时,将一段代码复制到固定的位置上执行,
例如:有函数:
void dym_CODE()
{
...
}
我想在程序运行的时候,动态的将函数dym_CODE的代码复制到0X40000000处,并在复制完后跳到0X40000000处开始执行,如果是用汇编,比较容易实现,用C语言的话不知道怎么弄?
我用的是ADS1.2,哪位大哥知道的,指点下小弟,谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
收藏
・
1
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
10
)
songhowl
雪 币:
240
活跃值:
(35)
能力值:
( LV6,RANK:90 )
在线值:
发帖
4
回帖
29
粉丝
1
关注
私信
songhowl
2
2
楼
一个参考:
去看一下arm的scatter 文件,理解什么叫执行view,什么叫load view.
写相应的scatter file.把相应的代码加入定义的执行view中。
然后写一个拷贝的程序,将代码拷贝到相应的区域。会用到ADS生成的一些特殊的变量来标记你的代码的起始位置以及长度。
2010-2-26 12:57
0
banid
雪 币:
205
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
15
粉丝
0
关注
私信
banid
3
楼
谢谢 songhowl 的回复,我去找下相关的资料看看
2010-2-26 13:40
0
ZhaoYF
雪 币:
220
活跃值:
(341)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
25
粉丝
4
关注
私信
ZhaoYF
4
楼
ADS没用过
在VS中可以这样
typedef void T_dym_CODE ( void );
T_dym_CODE *My_dym_CODE ;
My_dym_CODE = (T_dym_CODE *)0X40000000;
My_dym_CODE();
2010-2-26 17:38
0
banid
雪 币:
205
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
15
粉丝
0
关注
私信
banid
5
楼
这只是跳到0X40000000但没有复制代码?
2010-3-1 15:50
0
ZhaoYF
雪 币:
220
活跃值:
(341)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
25
粉丝
4
关注
私信
ZhaoYF
6
楼
复制代码不是很简单么
一个for或while不就解决了
2010-3-2 09:45
0
songhowl
雪 币:
240
活跃值:
(35)
能力值:
( LV6,RANK:90 )
在线值:
发帖
4
回帖
29
粉丝
1
关注
私信
songhowl
2
7
楼
对于比较简单的代码,如果没有涉及到地址的重新映射的情况下,可以直接拷贝。比如汇编的指令,可以直接这么做。但是对于复杂的C代码,用scatter文件比较合适,在连接阶段就帮你把地址重新映射好了。动态的执行很多时候并不是简单的拷贝就能做到的。
2010-3-3 09:37
0
ZhaoYF
雪 币:
220
活跃值:
(341)
能力值:
( LV2,RANK:10 )
在线值:
发帖
3
回帖
25
粉丝
4
关注
私信
ZhaoYF
8
楼
直接拷贝是没考虑到重定位的情况
...
类似DLL了
请问songhowl
在有重定位的情况下
用scatter文件能否做到让指定代码在任意地址上加载运行
还是只能在编译时指定某个地址
2010-3-3 11:08
0
songhowl
雪 币:
240
活跃值:
(35)
能力值:
( LV6,RANK:90 )
在线值:
发帖
4
回帖
29
粉丝
1
关注
私信
songhowl
2
9
楼
不能做到在任意地址上加载运行,只能在指定位置。当然如果你在编写C代码的时候比较注意,是可以做到的,这个时候只要拷贝一下就行了,也就不需要用scatter文件了。前提是你对这个比较了解。
使用scatter文件在指定位置执行是比较保险的方法。
如果了解的比较深入的话,去网上搜一下ARM的位置无关的代码应该怎么编程,以及多试验。
2010-3-3 11:32
0
banid
雪 币:
205
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
4
回帖
15
粉丝
0
关注
私信
banid
10
楼
请问songhowl在scatter文件指定运行位置,那代码的加载(拷贝)要自己完成,还是编译器会自动生成相应的代码?
2010-3-3 21:15
0
songhowl
雪 币:
240
活跃值:
(35)
能力值:
( LV6,RANK:90 )
在线值:
发帖
4
回帖
29
粉丝
1
关注
私信
songhowl
2
11
楼
需要自己完成加载的代码。也是做一个拷贝的动作。
2010-3-5 09:26
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
banid
4
发帖
15
回帖
10
RANK
关注
私信
他的文章
[求助]一段反汇编自己转换成C语言,还是看不懂什么意思
29510
[求助]arm 代码动态复制请教
8464
[求助]arm反汇编请教,谢谢
12479
[求助]使用SysListView32,如何使所选的行始终高亮显示
5345
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部