gpt4 book ai didi

c - 重用已编译的 .exe 文件中的字符

转载 作者:太空狗 更新时间:2023-10-29 17:23:32 25 4
gpt4 key购买 nike

很久以前,出于好奇,我曾尝试对游戏“Dangerous Dave”的可执行文件进行十六进制编辑。我查看了该文件以查找我能找到的任何字符串,并进行了一些随机编辑以查看它是否真的会更改游戏中显示的文本。

看到结果我很惊讶,我现在使用十六进制编辑器和 DOSBox 重新创建了它: enter image description here

可以看出,编辑字符串“ROMERO”中的两个字符“RO”导致更改了 4 个字符,结果变成了“ZUMEZU”。程序似乎在重复使用这两个字符,并在该字符串的开头和结尾打印它们。

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

最佳答案

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

这些压缩算法可能不仅仅用于这个字符串,也不只是用于文本;它们很可能还用于压缩其他数据,例如图形或关卡布局。简而言之,使用此算法可能会节省大量资金!

这些压缩算法的使用在旧游戏中很常见,作为一种节省磁盘空间的方式,但不是自动的 - 这种算法的实现可能是 Romero 自己添加的。

关于c - 重用已编译的 .exe 文件中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com