我 我爱PASCAL Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-25 #1 难道是压缩机器代码,删除无用代码和内存? 还是做成了自解压的东西,解压到内存后再运行?
D dcms Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-25 #3 同时还有文件合并和分解算法! 貌似有 HashTable之类的算法! 可以参考 Zlib 开源的 C 语言代码!
W Writer Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-25 #4 压缩不是关键,关键是压缩后如何让系统执行压缩出来的机械码, 同时也要为这些机械码创建执行环境。 具体怎么做我也不太清楚[] 这个问题建议到 看雪问, 那里都是这方面的高手[] http://bbs.pediy.com/
压缩不是关键,关键是压缩后如何让系统执行压缩出来的机械码, 同时也要为这些机械码创建执行环境。 具体怎么做我也不太清楚[] 这个问题建议到 看雪问, 那里都是这方面的高手[] http://bbs.pediy.com/
D dcms Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-25 #6 着就很难说了,如果一个程序特别大,那么其本身所占用的内存就很大了,而如果压缩比很大同时内存解压.............. 所以事物都有两面性!
W wr960204 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-26 #7 PE文件压缩和加壳本来就是同一技术. 压缩通常就是 1)把每个节都压缩,可以是代码和资源等. 2)加入自己的解压代码 3)修改PE文件的入口到自己的解压代码处.解压代码结尾是跳回到正确的执行入口 这样系统的执行过程就是 1)加载PE文件 2)执行入口处的解压代码 通常都是这样的,当然也可以不是按PE文件现有节来压缩,而是整个压缩.但是这样要涉及到解压后自己分配各个节的虚拟内存等,麻烦一些.如果按照现有的节分开压缩,只要节属性的VirtualSize大小不变,操作系统就会自动分配好每个节的空间.简单一些
PE文件压缩和加壳本来就是同一技术. 压缩通常就是 1)把每个节都压缩,可以是代码和资源等. 2)加入自己的解压代码 3)修改PE文件的入口到自己的解压代码处.解压代码结尾是跳回到正确的执行入口 这样系统的执行过程就是 1)加载PE文件 2)执行入口处的解压代码 通常都是这样的,当然也可以不是按PE文件现有节来压缩,而是整个压缩.但是这样要涉及到解压后自己分配各个节的虚拟内存等,麻烦一些.如果按照现有的节分开压缩,只要节属性的VirtualSize大小不变,操作系统就会自动分配好每个节的空间.简单一些
H Hydra0 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-26 #8 可以自己去下UPX的源码看看,他不单单对Win32 PE文件的压缩,还包括其他平台的可执行程序的压缩,压缩算法你可以先不管,就看看怎么处理的解压缩后的操作
W wr960204 Unregistered / Unconfirmed GUEST, unregistred user! 2007-03-26 #9 其他平台下的可执行文件 Unix及其派生的Minix,Linux等的可执行文件LE和PE基本上都是类似的,因为PE文件本来就是MS从Unix那边挖人过来开发的,参照LE文件格式设计