2016-01-31 133 views
6

在很久以前,字符,出於好奇,我已經試過十六進制編輯遊戲「危險戴夫」的可執行文件。 我看任何字符串我能找到的文件來解決,並提出了一些隨機的編輯,看看它是否會真正改變遊戲中顯示的文本。重用編譯.exe文件

我很驚訝地看到結果,我已經用十六進制編輯器和DOSBox中現在重建: enter image description here

可以看出,編輯兩個字符「RO」字符串「ROMERO」的結果在4個字符被改變,結果變成「ZUMEZU」。看起來好像該程序正在重用這兩個字符並在該字符串的開始和結尾處打印它們。

這是什麼原因?我的第一個猜測是試圖使可執行文件更小,但只有重用字符的代碼可能需要比保存2字節更多的空間。 這只是作者完成的一個技巧,或者只是一些編譯器巫術?

回答

5

狡猾的說肯定沒有反向工程,但我的猜測是,程序中的很多常量數據是使用LZ family算法壓縮的。這些壓縮方案基本上按照您觀察的方式工作:它們將重複的子字符串編碼爲先前已解碼的文本的引用。

這些壓縮算法,很可能是用於不僅僅是這一個字符串更多,而不僅僅是文字要麼;它們很可能也被用來壓縮其他數據,如圖形或水平佈局。總之,使用這種算法可能會節省大量成本!

使用這些壓縮算法是在老遊戲爲節省磁盤空間的方式常見的,但不是自動的 - 這種算法的實施將可能有什麼事情羅梅羅補充自己。

+0

類似地,有「軟」和「DISK,INC」之間的兩個額外的字節 - 也按字節壓縮的典型指示。 – usr2564301