请问压缩exe文件的原理是什么? ( 积分: 50 )

  • 主题发起人 我爱PASCAL
  • 开始时间

我爱PASCAL

Unregistered / Unconfirmed
GUEST, unregistred user!
难道是压缩机器代码,删除无用代码和内存?
还是做成了自解压的东西,解压到内存后再运行?
 
哈夫曼算法!
 
同时还有文件合并和分解算法! 貌似有 HashTable之类的算法!
可以参考 Zlib 开源的 C 语言代码!
 
压缩不是关键,关键是压缩后如何让系统执行压缩出来的机械码, 同时也要为这些机械码创建执行环境。
具体怎么做我也不太清楚[:D]
这个问题建议到 看雪问, 那里都是这方面的高手[:D]
http://bbs.pediy.com/
 
而且这样会不会减慢运行速度
 
着就很难说了,如果一个程序特别大,那么其本身所占用的内存就很大了,而如果压缩比很大同时内存解压..............

所以事物都有两面性!
 
PE文件压缩和加壳本来就是同一技术.
压缩通常就是
1)把每个节都压缩,可以是代码和资源等.
2)加入自己的解压代码
3)修改PE文件的入口到自己的解压代码处.解压代码结尾是跳回到正确的执行入口
这样系统的执行过程就是
1)加载PE文件
2)执行入口处的解压代码
通常都是这样的,当然也可以不是按PE文件现有节来压缩,而是整个压缩.但是这样要涉及到解压后自己分配各个节的虚拟内存等,麻烦一些.如果按照现有的节分开压缩,只要节属性的VirtualSize大小不变,操作系统就会自动分配好每个节的空间.简单一些
 
可以自己去下UPX的源码看看,他不单单对Win32 PE文件的压缩,还包括其他平台的可执行程序的压缩,压缩算法你可以先不管,就看看怎么处理的解压缩后的操作
 
其他平台下的可执行文件
Unix及其派生的Minix,Linux等的可执行文件LE和PE基本上都是类似的,因为PE文件本来就是MS从Unix那边挖人过来开发的,参照LE文件格式设计
 
多谢几位高手指教
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
932
SUNSTONE的Delphi笔记
S
S
回复
0
查看
955
SUNSTONE的Delphi笔记
S
S
回复
0
查看
776
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部