免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2009-09-29 16:55 |只看该作者
首先看看是不是非得这样做,可能有更好的方法。

如果非得这样做,还是好好去看一下dlopen()的实现,把需要执行的代码做成动态库,然后按照dlopen的流程,装载执行,唯一的区别是dlopen()是读文件,楼主是从网络读取而已。

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

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

就这种方法就可以了。
如果开启CPU禁止栈执行的位,就可以这样。栈本来就可是可执行的,不需要改内存属性。
数组里存可执行代码,通过转换成函数指针执行的方法应用很广泛的

论坛徽章:
0
23 [报告]
发表于 2009-09-29 23:23 |只看该作者
我曾经成功试过在i386下的FreeBSD加载windows 的DLL文件来播放rmvb文件(不过现在已经不需要了,ffmpeg已经可以解码rmvb了)。整个DLL文件是变成一个数据静态链接到程序里的,然后进程启动后,自己再对这个数组的进行重新定位(PE格式的DLL)。我想ELF应该也是可以的,只不过可能会复杂些。至于权限可以使用mprotect来修改,看看qemu就是使用mprotect来实现自修改的。

[ 本帖最后由 pagx 于 2009-9-29 23:34 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2009-09-29 23:42 |只看该作者
代码的意思

论坛徽章:
0
25 [报告]
发表于 2009-09-30 08:33 |只看该作者
简单的做一个ram disk要比靠不住的旁门左道好的多

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

[ 本帖最后由 bert1984 于 2009-9-30 11:27 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
27 [报告]
发表于 2009-10-06 10:51 |只看该作者
这需求其实是很广泛的。

等答案   ^_^.

论坛徽章:
0
28 [报告]
发表于 2009-10-06 11:03 |只看该作者
可不可以写个脚本把内容插入到程序中重新编译一下在运行呢?
不过貌似会很复杂的吧,还要把哪些内容定位到程序源代码里面...

[ 本帖最后由 blueheavenljn 于 2009-10-6 11:05 编辑 ]

论坛徽章:
0
29 [报告]
发表于 2009-10-06 11:37 |只看该作者
这个技术 MS用的最好  可以看看 COM 接口的书
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP