2016-01-31 101 views
6

在很久以前,字符,出于好奇,我已经试过十六进制编辑游戏“危险戴夫”的可执行文件。 我看任何字符串我能找到的文件来解决,并提出了一些随机的编辑,看看它是否会真正改变游戏中显示的文本。重用编译.exe文件

我很惊讶地看到结果,我已经用十六进制编辑器和DOSBox中现在重建: enter image description here

可以看出,编辑两个字符“RO”字符串“ROMERO”的结果在4个字符被改变,结果变成“ZUMEZU”。看起来好像该程序正在重用这两个字符并在该字符串的开始和结尾处打印它们。

这是什么原因?我的第一个猜测是试图使可执行文件更小,但只有重用字符的代码可能需要比保存2字节更多的空间。 这只是作者完成的一个技巧,或者只是一些编译器巫术?

回答

5

狡猾的说肯定没有反向工程,但我的猜测是,程序中的很多常量数据是使用LZ family算法压缩的。这些压缩方案基本上按照您观察的方式工作:它们将重复的子字符串编码为先前已解码的文本的引用。

这些压缩算法,很可能是用于不仅仅是这一个字符串更多,而不仅仅是文字要么;它们很可能也被用来压缩其他数据,如图形或水平布局。总之,使用这种算法可能会节省大量成本!

使用这些压缩算法是在老游戏为节省磁盘空间的方式常见的,但不是自动的 - 这种算法的实施将可能有什么事情罗梅罗补充自己。

+0

类似地,有“软”和“DISK,INC”之间的两个额外的字节 - 也按字节压缩的典型指示。 – usr2564301