近期调试了一下DMC4,发现了一些有趣的事情,在Patch完毕之后试图用UPX压缩一下程序的大小,但是不管用什么软件压缩几乎都会报错(期间尝试用UPX、Nspack、WinPack等等)。 用LordPe查看了一下区段大致了解了一下问题发生的原因、 1、程序的最后一个区段物理大小和实际大小不符。 2、缺少的部分有较为主要的代码。 3、UPX等软件没有对文件对齐进行处理。 由此可以得到一个非常有趣的结论:如果你利用文件对齐来忽略一些代码,那么这些代码会因为在文件对齐作用下,被加载进内存,得到正确执行,但是当UPX等压缩软件处理该文件的时候就会彻底的忽略该代码使程序悲剧。