关于内存执行exe,我没试过,下面的帖子应该能帮到你,我也去试试先---------------------------------------------------问题: 直接在内存中运行资源中的执行文件的问题 ( 积分: 100 ) 分类: 数据库-文件型 来自: wynney, 时间: 2006/12/05 4:21:00, ID: 3639112 在盒子上得不到答案 只有来请教这里的高手了 我的想法是不让资源释放到硬盘再执行 而是直接释放到内存中执行 在这里有兄弟已经公布了源码 http://www.2ccc.com/article.asp?articleid=3228 但是资源文件中的可执行文件只能是Delphi的 “可以运行所有类别EXE的,这个修改简单,你在MemoryRun单元加上JEDI的API声明文件既可,或者手动做个Convert,代码可以参考UPX的” 作者说这样做可以运行其他类别的EXE 我不懂他的意思,需要加那一个JEDI的API声明文件呢? 小弟学Delphi不久 各位大哥有没办法啊 分数不多谢谢指点下 来自: 轻舞肥羊, 时间: 2006/12/05 10:18:21, ID: 3639226 学DELPHI不久就研究这个啊?厉害. GOOGLE搜索 PEUnit 这个关键字,有你想要的代码 来自: wynney, 时间: 2006/12/06 3:34:24, ID: 3639847 感谢楼上的兄弟! 可惜我是想调用资源文件 不知道怎么修改 来自: wr960204, 时间: 2006/12/06 12:24:03, ID: 3640102 http://forum.eviloctal.com/read-htm-tid-16803.html 这个我试过是可以的。 它的原理是随便启动一个EXE(例子里面好像是宿主)把主线程暂停。然后把我们要运行的数据拷贝到该进程的空间,处理。然后把主线程的代码指针修改到我们的EXE数据的入口。启动线程。 来自: xuegaoyili, 时间: 2006/12/06 13:08:42, ID: 3640149 学习帮顶 来自: 轻舞肥羊, 时间: 2006/12/06 14:07:17, ID: 3640216 ** 从资源文件载入EXE ** exefile.rc ** 1 EXE "E:/Delphi Projects/TK/Bin/TK.exe" var Buf : Pointer; Size : DWORD; ProcessId: Cardinal; ResHandle:Cardinal; begin ResHandle := FindResource(hInstance, Pointer(1), 'EXE'); if ResHandle > 0 then begin Size := SizeofResource(hInstance, ResHandle); Buf := LockResource(LoadResource(hInstance, ResHandle)); MemExecute(PChar(Buf)[0], Size, '', ProcessId); end; end; 来自: wynney, 时间: 2006/12/06 22:54:16, ID: 3640471 to:轻舞肥羊 你的代码是正确的,我也按原先的哪个代码修改了下 **Target.rc **Setup eXeFile Target.exe var ABuffer: array of byte; ProcessId: Cardinal; //进程ID Res: TResourceStream; //资源流 begin Res := TResourceStream.Create(HInstance,'Setup','eXeFile'); //创建资源 Application.Terminate; try SetLength(ABuffer, Res.Size); //设置大小 Res.ReadBuffer(ABuffer[0], Res.Size); //开始读了 MemExecute(ABuffer[0], Res.Size, '', ProcessId); //调用PEUnit finally Res.Free; end; end; 可否帮我看看,这2个那一个执行效果好一些? 另外,我测试了下,如果资源为非标准exe[比如屏幕录象生成的exe],就会出错 大哥有没解决之法? 来自: wr960204, 时间: 2006/12/06 23:13:03, ID: 3640485 屏幕录像生成的EXE是一个播放器+数据。数据附在EXE文件的后面。当EXE加载的时候去读取自身文件后面的数据。 上面我给你的内存执行代码因为是执行的宿主EXE文件,即便后来内存中换成了屏幕录像的EXE,但读取文件中的数据的时候读取的是宿主的EXE文件,宿主的EXE后面当然没有他要的数据了。 原理是这样的,具体解决方案你自己去想 来自: wynney, 时间: 2006/12/06 23:49:29, ID: 3640495 to:wr960204 首先分数只有100,轻舞肥羊比你先帮助我,所以我只能这样去分配分数了 不好意思啊 另外,你说的原理我清楚,兄弟可否出个解决的法子?