再再问如何动态生成EXE文件(400分)了!!!!!(300分)

  • 主题发起人 主题发起人 homag
  • 开始时间 开始时间
H

homag

Unregistered / Unconfirmed
GUEST, unregistred user!
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=278860
 
16 位还是32 位
 
这可不是一件简单的事情, 我也没做过,'
不过你至少要两方面的知识:
1. Win32应用程序的可执行文件的格式.
2. Intel x86 的机器指令的格式.
另外, 还应熟悉Windows关于进程管理的知识.
我想都不敢想, 祝你好运.
 
找vclzip控件的源代码看看,它可以生成自解压文件,原理应该是已有一个
.bin文件然后向后面添东西。
直接生成恐怕有点难。
 
最好把你的需求说得具体一些。
 
如果你非的问,不妨用BlockWrite来完成,
格式则按照Dos的Exe来写!如Blockwriter($4d,$5a);
 
我也想知道!
 
我也想知道!
 
到http://www.csdn.net/develop/read_article.asp?id=896去看看吧!
 
如果要生成win下的就得对pe格式非常了解,我这有份关于pe的资料,如果需要的话就发
mail到bluely@netease.com吧。
 
请结束或继续!
 
homag:
我看了LID=278860中有人的回答,说是把其它东西复制到Exe文件的尾部,要用的时候再
读出了,你觉得有点高深?实际上就是这样做的!如果你不这样做,而要直接研究Exe
的构造原理,那可就真的是……*&^#$%
具体理论是这样的:用文件流TFileStream把要写入的东西(任何文件)写到一个Exe文件
的尾部,要用的时候再用文件流读出来。如果要写入多个文件,还需要写一个结构表在
文件尾,以从结构表中读出各个副加文件的信息,包括大小等。
具体做法请参看以下问题,相信会对你有不少帮助的。
http://www.delphibbs.com/delphibbs/dispq.asp?LID=403887
http://www.delphibbs.com/delphibbs/dispq.asp?LID=417770
 
另外,你还可以用资源脚本的方式将资源编入Exe中,这种方法可以较好地管理资源。
尝试一下用TResourceStream吧。我还没有试过,不知道这种方法能不能对资源进行压缩,
以减小文件体积。如果你先试成了就告诉我,我试成了也会把方法贴出来的。
 
可以自己做一个RC文件,例如 sample.rc ,RC文件其实就是一个资源文件的描述文本,通过“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,例如:

ARJ EXEFILE c:/arj.exe

然后用BRCC32把这个RC文件编译成sample.res(真正的资源文件)。

在Delphi的工程文件中使用 $R 编译指令让Delphi包括资源到EXE文件里面。

{$R sample.res}

这样我们就可以在这个单一的执行文件中调用资源了。举例如下:

EXEFILE:

procedure ExtractRes(ResType, ResName, ResNewName : String);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName);
Res.Free;
end;

 
请继续或结束
 
继续偷听!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部