免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 10178 | 回复: 28
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-26 21:13 |只看该作者 |倒序浏览
5可用积分
我想在程序中动态下载一段代码放到一个数组中然后执行,伪代码表示如下

程序a,编译为二进制代码。

程序b
{
unsigned char  code[200]

下载程序a数据,保存在code数组中。
执a函数。
}

环境为linux 2.6.12,gcc
我知道 code在数据段,不能直接执行,但不知道要怎么样处理才能执行,望高手指教。

最佳答案

查看完整内容

个人建议,根据“最小立异原则(又称‘最小惊奇原则’)”你可以把它下载的时候放到磁盘上,然后再按照常规的流程来调用它,比如 system 或者 fork+exec*如果没有硬件磁盘的话,可以做一个 tmpfs,在内存中虚拟出一个分区来。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-09-26 21:13 |只看该作者
原帖由 beyond2004 于 2009-9-26 23:10 发表
没有,只是我自己比较感兴趣

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

如果没有硬件磁盘的话,可以做一个 tmpfs,在内存中虚拟出一个分区来。

论坛徽章:
0
3 [报告]
发表于 2009-09-26 21:30 |只看该作者
不懂你这个代码是什么意思?
如果是可执行的是完全Ok的.
if(...)
  execl(data,.....)

论坛徽章:
0
4 [报告]
发表于 2009-09-26 21:34 |只看该作者
linux没使用X86段式管理,而使用了页式管理.估计在特权级别直接改页属性就可以了

[ 本帖最后由 epegasus 于 2009-9-26 21:40 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-09-26 21:35 |只看该作者
如果code中就是一个函数编译后的代码 大概是这样吧
char code[1024];
    void (*f)()=(void (*)())code;



如果是一个完整的可执行文件那就输出到储存介质,然后执行之

论坛徽章:
0
6 [报告]
发表于 2009-09-26 21:39 |只看该作者
我的想法是, 这个要了解Linux可执行文件的格式, 可以查看下相关的资料. 如果了解的话, 生成一个可执行文件, 然后用exec执行之.

不过, 直接传递这种平台相关的二进制代码并不是一个好的做法, 可以传递解释型语言的代码如Python/JavaScript等.

论坛徽章:
0
7 [报告]
发表于 2009-09-26 21:43 |只看该作者
原帖由 mcemil 于 2009-9-26 21:35 发表
如果code中就是一个函数编译后的代码 大概是这样吧
char code[1024];
    void (*f)()=(void (*)())code;

这种方法有依据吗? 还是实践过了?

论坛徽章:
0
8 [报告]
发表于 2009-09-26 21:59 |只看该作者
原帖由 ideawu 于 2009-9-26 21:43 发表

这种方法有依据吗? 还是实践过了?


都不是,只是猜测。

论坛徽章:
0
9 [报告]
发表于 2009-09-26 22:30 |只看该作者
shellcode

论坛徽章:
0
10 [报告]
发表于 2009-09-26 22:50 |只看该作者
sorry,我把问题在说清楚一点,我的程序是嵌入式的,cpu是mips的,os是linux,程序在flash中,有文件系统,但是是只读的,可以动态加载库,也没有这些解释语言。所以我想把代码通过网络下载到ram执行。所以有两个问题,一是我的函数a要编译成什么样的代码,程序b该怎么做?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP