先编写一个程序编译成EXE,使这个EXE文件从自己的最后面读取数据,数据的格式当然得自己定了。然后将你的文档,加在EXE文件的最后面就形成了类似自解压的文件。这个EXE文件就是一个模板。
比如你把两个文件创建成两个自解压的文件exe1,exe2,然后再将这两个文件创建成zip1,zip2格式。你就会发现,exe1-zip1 = exe2-zip2。exe1和exe2前面的数据是一摸一样的。后面的数据分别和zip1、zip2一样。
vchelp.net上面有一个闻以祥编写的“传话精灵”的程序,就是这个原理,有源程序,你可以看看。
比如你把两个文件创建成两个自解压的文件exe1,exe2,然后再将这两个文件创建成zip1,zip2格式。你就会发现,exe1-zip1 = exe2-zip2。exe1和exe2前面的数据是一摸一样的。后面的数据分别和zip1、zip2一样。
vchelp.net上面有一个闻以祥编写的“传话精灵”的程序,就是这个原理,有源程序,你可以看看。
解决方案 »
- 如何调用自定义的光标
- 面对女同事的视觉骚扰,应该如何处理?
- 请问如何在程序运行中动态输出一个exe或dll文件?
- 请教一个1394口的简单问题!(我只有41分了,全给了)
- 请教:从图象中取出每个像素的RGB值??
- 一个软件在运行时会自动运行一个 internat.exe 的进程
- 一定要学《windows 程序设计》(Charles Petzold)吗?
- 关于Windows Shell编程
- 我用vc6.0打开某个特定文件后,总是一卡一卡的怎么办
- __cdecl、__fastcall、__stdcall的区别和各自的意义——MSDN没看明白。
- spyxx真是个好东东~~~~~
- 再问listctrl!!!!
这骗小孩子还行。
难道那些自解包也都是这么工作的?!
我认为,他们是从exe所在的内存段中读取末尾的数据的。所以我想知道“怎么获得自身程序所在内存段的指针?”
我认为不是这样。象zip自解压文件这些都是把数据文件作为资源存放的。
可执行文件运行时,资源并不载入内存,否则几百兆的ZIP自解压文件岂不是不能存在了吗?
当然实现的细节也不是“read了一下那个exe文件,然后创建一个txt文件,然后主体程序读取”那样简单,但原理差不多。
嗯。我现在觉得也有可能是另外读取的。
不过我觉得你举的反例并没多大说服力,win系统用虚拟内存机制使内存增加至2G,对程序来说,这2G是不分真假的,不少情况下都会出现程序所用到的内存大于实际内存的情况。不过如何编辑一个exe的资源呢?又如何读取自己编辑的资源呢?(也就是说如何设置自己编辑的资源ID)
http://www.csdn.net/expert/topic/144/144639.shtm
总不可能每做一个自解包就用vc便一个程序吧?!
那你不如这样,先编写一个exe程序,它会读取它自己末尾的数据,
而你的外部程序要作的工作是把数据拷贝到这个exe文件的末尾.
我以前写过文件切割机,其中的自动合并文件功能就是这样实现的.