免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: beyond2004
打印 上一主题 下一主题

[C] 如何执行数组中的代码? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2009-09-26 22:52 |只看该作者
原帖由 beyond2004 于 2009-9-26 22:50 发表
sorry,我把问题在说清楚一点,我的程序是嵌入式的,cpu是mips的,os是linux,程序在flash中,有文件系统,但是是只读的,可以动态加载库,也没有这些解释语言。所以我想把代码通过网络下载到ram执行。所以有两个 ...

你们公司没有架构师吗?

论坛徽章:
0
12 [报告]
发表于 2009-09-26 23:10 |只看该作者

回复 #10 flw 的帖子

没有,只是我自己比较感兴趣

论坛徽章:
0
13 [报告]
发表于 2009-09-26 23:20 |只看该作者
原帖由 flw 于 2009-9-26 22:52 发表

你们公司没有架构师吗?

问到点了. 楼主其实应该换个思路.

论坛徽章:
0
14 [报告]
发表于 2009-09-27 09:15 |只看该作者
考虑被下载的代码是不是可重定位的?还是必须下载到特定地址?
代码引用的地址是不是都已经重定位了?

论坛徽章:
0
15 [报告]
发表于 2009-09-29 12:39 |只看该作者
原帖由 flw 于 2009-9-26 23:16 发表

个人建议,根据“最小立异原则(又称‘最小惊奇原则’)”你可以把它下载的时候放到磁盘上,
然后再按照常规的流程来调用它,比如 system 或者 fork+exec*

如果没有硬件磁盘的话,可以做一个 tmpfs,在内 ...

你的意思是我申请一块内存,把它当成tmpfs, 然后把它挂载到文件系统上,在执行上面的程序吗?如何做出tmpfs呢,有没有资料可参考?

论坛徽章:
0
16 [报告]
发表于 2009-09-29 13:01 |只看该作者
原帖由 beyond2004 于 2009-9-29 12:39 发表

你的意思是我申请一块内存,把它当成tmpfs, 然后把它挂载到文件系统上,在执行上面的程序吗?如何做出tmpfs呢,有没有资料可参考?

mkfs

论坛徽章:
0
17 [报告]
发表于 2009-09-29 15:00 |只看该作者
这些操作都要在程序b中完成,另外请看第9楼的条件说明,看来这个问题很有难度,等我把他解决了,我去当架构师去,哈哈

论坛徽章:
0
18 [报告]
发表于 2009-09-29 15:06 |只看该作者
lz的需求类似于一些利用数组堆栈溢出漏洞注入可执行代码的黑软。
比如函数调用返回时,会从堆栈中pop出返回地址给指令寄存器,如果你把堆栈中这部分内容覆盖,将返回地址改为你下载的代码保存处的内存地址,那么你的程序就会跳转到你的代码处。当然这是很tricky的做法,可移植性、可维护性非常差,不适宜产品应用。

[ 本帖最后由 gz80 于 2009-9-29 15:12 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-09-29 15:17 |只看该作者
这个需求的起源是上面的限制条件,文件系统只读,如果程序出现漏洞的话升级费时费力,所以我就想让程序启动先检测一些条件,看是否需要下载一些代码来跳过某个bug, 并且不需要堆栈溢出,只要把数组中的代码变为可以执行的就行,类似于动态加载一个库,但这个库不是文件,而是在数组里。

论坛徽章:
0
20 [报告]
发表于 2009-09-29 15:32 |只看该作者
那就嵌入汇编啊,直接jmp到你下载的程序的内存地址,执行完后再jmp回来;或者用call,return。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP