读书人

请问一个有关问题怎么将数据嵌入可执

发布时间: 2012-03-16 16:34:56 作者: rapoo

请教一个问题,如何将数据嵌入可执行文件中
有一组数据,数据量大,以文本的形式存放在硬盘上

每次调用exe时,首先从硬盘上将数据读入

如果将exe分发给别人,同时也要将数据文件一同给别人

看来资源文件,但是不知道怎么将数据嵌入到exe中

数据格式是:
文件1中:
1 2 3
4 5 6
.。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。

文件2中:
1,2,3
4,5,6,7,8
.........................
................................

在执行exe是,首先将上述两个文件中的数据读入几个数组中去


[解决办法]
给你一篇文章供你参考:

1:编辑一个resource.rc文件,里面类似如下:

hookdll RC_Dll YourHookDllFileName.Dll

2:然后用Brcc32.exe编译:

brcc32 resource.rc

结果生成resource.res文件

3:修改窗体Pas或者Dpr文件,添加下面的代码:

{$R *.res}

{$R resource.res}

4:关键的代码:

在窗体初始化或者工程的开头部分添加代码:

var

res:tresourcestream;

....

res:=tresourcestream.create(instance,'hookdll','RC_Dll');

res.SaveToFile('YourHookDllFileName.Dll');

res.Free;

5:你的程序退出的时候:

DeleteFile('YourHookDllFile.Dll');

6:End



----------------------------------------

自己做一个一个资源文件的描述文本RC文件,例如 sample.rc ,“记事本”程序创建就行了。然后可以输入一些我们要定义的资源,



例如:



MEN BITMAP c:\bitmap\men.bitmap

ARJ EXEFILE c:\arj.exe

MOV AVI c:\mov.avi



然后用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;



AVI:



procedure LoadAVI;

begin

{Avi1是一个TAnimate类}

Avi1.ResName:='AVI';

Avi1.Active:=True;

end;
[解决办法]
先用文件流读入EXE文件 然后扩充SIZE SIZE=EXE.SIZE + 文件.SIZE 然后设置流偏移 开始写文件
WINDOWS执行EXE的时候 执行到EXE标志结束位置就OK了 所以不会影响你的程序的。

其实有些病毒也是这样做的 不过是加载到EXE其他位置罢了;

读书人网 >.NET

热点推荐