【问题标题】:C/C++ Updating a executable? [closed]C/C++ 更新可执行文件? [关闭]
【发布时间】:2016-01-20 16:03:45
【问题描述】:

我想问一下应用程序更新是如何工作的。我不明白!我给你举个 GTA V 的例子。

当 Rockstar 发布补丁或更新时,他们如何在不重新下载整个 GB/MB 或重新编译的情况下更新代码?更新后即可轻松开始游戏。

我在其他游戏中看到了类似的方法。他们修改了例如 2MB 的代码,而更新程序只下载了 2MB。修改后的代码无需重新编译即可进入游戏......我是愚蠢的还是为什么我不明白它是如何工作的? ...我的意思是,如果有一个 50MB 大的 .DLL 文件并且 devoloper 只编辑了 1 行,更新程序不会再次下载 50MB,相反它只会获取 1 个编辑的行,是的...它在._.*...

【问题讨论】:

  • 部分代码拼凑而成。除非它只是可执行文件,否则程序正在更新 dll 等等。这是很多小工作,补丁(他们所谓的)他们只是更新某个mission1.dll或其他什么,或者库文件中的新武器,你会在几分钟内得到一个完整的更新。可执行文件只是一个类似框架的东西,它了解如何生成 dll 和其他文件中的内容。
  • 另外,还有十六进制编辑。他们可以进行大小检查,或在配置中更新它。这将允许在几行代码中使用新武器等。
  • 感谢您的回答!那么,完美的方法是制作碎片吗?例如 dll/weapons.dll、clothing.dll、vehicles.dll、physics.dll?或者我应该怎么理解。
  • 不,你明白了。没有什么神奇的事情发生。他们甚至可能拥有用于代码行的主要可用空间,以便将来验证 dll 中的更新。因为他们必须符合标准。保留一个空数组可以允许使用新武器。
  • 哦!现在,谢谢!非常感谢。有用的答案,我明白了:D

标签: updates binaryfiles patch updating


【解决方案1】:

我想你不知道申请binary patches的可能性。

基本上这个想法是,如果源代码的变化很小并且重新编译二进制文件,那么很大一部分将是相同的。这可以被利用来发布一个尺寸也很小的补丁。

例如,假设您的 50 MB 二进制文件中只有 10 个字节被更改。一个聪明的工具可以做到这一点:获取旧文件,忽略前 23,678,789 个字节,然后用补丁的内容替换接下来的 10 个字节,删除另外 2 个字节,忽略接下来的 4332 个字节,添加一个,其他所有内容都保持不变.在适当的格式下,这个补丁只需要几个字节。

当然,完整补丁包含原始文件和修改文件的哈希是合理的,以确保一切顺利,并且在发生灾难时您可以重新下载整个文件。您可以添加签名以确保仅安装授权补丁。但基本思想是你可以做二进制差异和补丁,这是绝对常见的。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多