我是菜鸟,一直都不明白,一个EXE文件生成后,怎样写补丁程序、升级程序来增强修补原可执行文件所实现的功能?是在开始写程序时就应该考虑到的,还是用一些比较高深的反汇编之类的东西来实现,究竟是采用什么样的原理?并且如果是修改三层结构下的OCX,也是一样的吗? 请各位大虾帮忙。
直接覆盖exe,直接更新exe文件就呀,
如果要修改ocx,把要改的文件带上,覆盖原来的文件就行了。
我觉得应该是在程序运行时,它用补钉程序取代原程序的相应代码,或插入一段代码。应该用到汇编层技术。
在写程序时就已经留下接口,不少补丁程序都是DLL.
大部分的升级程序都是采用的替换的办法。
就是覆盖原来的文件。由于有些文件正在使用,不能立即替换,所以都属需要重新启动才能生效。
这个在window、borland补丁包里面用到的。替换的包括exe,ocx,dll等等,虽然补丁体积会大,但是彻底,适合程序代码变化较大的,比如你看office的补丁,新文件比原来的变化很大。
还有一类就是creak 一个程序,比如破解某软件的注册码、有效期,由于是针对某一个固定版本,而且多是修改几个字节,所以用一个程序去直接原文件,替换掉那几个字节,这样一来补丁文件会做得很小,几十甚至几k就行了。
Windows Update很多是依靠C:\WINDOWS\WININIT.INI文件重新启动计算机时来更新的。
哦,原来是替换。
值得学习
关注中
有一种文件比较程序,能比较两个文件的不同之处。。。
然后就生成补丁程序,补丁的大小取决于两个文件的差别大小。。。
运行补丁,就自动把不同的地方替换了。。。
to liubingqian(liubingqian)
"Windows Update很多是依靠C:\WINDOWS\WININIT.INI文件重新启动计算机时来更新的。" 这个文件只能在win9x下使用对于nt架构的nt4和2000\xp是没用的。
你看看msdn上面关于 Wininit.ini的说明,对于nt系统,需要使用MoveFileEx来完成启动的替换。
都是替换,但是对版本号信息的处理技术很多种,最终都一样,不能让低版本的更新了高版本的。
是有直接写文件的,个人猜测是把exe文件打开进行流操作一类的方法
up!关注!
在安装的时候在注册表中记录安装的路径
升级的时候覆盖相应路径下的相应文件。
我认为对程序打补丁,是修改其部分函数,简单的是修改了dll,然后替换,对exe的修改好象就比较麻烦了,那可能不是自己来做的,是有操作系统完成,主要是找函数的入口。